Getting Updates
Currently, the framework mainly supports two different methods to process updates: Polling
and Webhook
mode.
- Polling: mainly useful for small bots or with not much traffic, but especially for development mode, since it allows you to start developing a bot in a short time!
- Webhook: Strongly recommended for bots with high traffic and more generally for production mode.
To begin to process incoming updates, you must call the ->run()
method, at the end:
use SergiX44\Nutgram\Nutgram;
$bot = new Nutgram($_ENV['TOKEN']); // new instance
// register callbacks
// middlewares
// do your stuff
$bot->run(); // finally, begin to process incoming updates
Polling
This is the default running mode, when the ->run()
method is called, will block the script execution and starts
the update loop. This is meant to be used on a CLI or in a service unit.
use SergiX44\Nutgram\Nutgram;
use SergiX44\Nutgram\RunningMode\Polling;
$bot = new Nutgram($_ENV['TOKEN']); // new instance
$bot->setRunningMode(Polling::class);
// ...
$bot->run(); // start to listen to updates, until stopped
Webhook
This update mode is recommended for deploy your bot to production, but can be also used with ngrok or expose for development, the only difference is that it requires the webhook set manually.
use SergiX44\Nutgram\Nutgram;
use SergiX44\Nutgram\RunningMode\Webhook;
$bot = new Nutgram($_ENV['TOKEN']); // new instance
$bot->setRunningMode(Webhook::class);
// ...
$bot->run(); // after this, the script continues execution
After processing the current update, the script continues execution, BUT you shouldn't put long operations after the method anyway, as Telegram expects a response quickly.
Safe Mode
Nutgram provides a safe mode for webhook, that will check if the request is coming from Telegram, and will skip the update if not.
use SergiX44\Nutgram\Nutgram;
$bot = new Nutgram($_ENV['TOKEN']);
$webhook = new Webhook(secretToken: 'your-secret-token');
$webhook->setSafeMode(true);
$bot->setRunningMode($webhook);
Make sure to set the same secret token when you set the webhook on Telegram, otherwise the update will be skipped.
If you are using Laravel, you can skip this section, but take a look at the corresponding section:
Set url programmatically
You can set the webhook url programmatically, using the setWebhook
method:
use SergiX44\Nutgram\Nutgram;
$bot = new Nutgram($_ENV['TOKEN']);
$bot->setWebhook('your-webhook-url');
Customization
You can create your own running mode, if these do not satisfy you, in fact, you will just create a class that extends
the RunningMode
interface.
Retrieving updates manually
You can also use the low level telegram methods, and take over the whole update management, like in the example:
use SergiX44\Nutgram\Nutgram;
use SergiX44\Nutgram\Telegram\Types\Common\Update;
$bot = new Nutgram($_ENV['TOKEN']);
// Retrieve te list of pending updates...
$updates = $bot->getUpdates();
/** @var Update $update */
foreach ($updates as $update) {
// do stuff with your updates
}