setWebhook method
Use this method to specify a url and receive incoming updates via an outgoing webhook
Whenever there is an update for the bot, we will send an HTTPS POST request to the
specified url, containing a JSON-serialized Update.
In case of an unsuccessful request, we will give up after a reasonable amount of attempts.
Returns True on success.
If you'd like to make sure that the webhook was set by you, you can specify secret data in the parameter secretToken.
If specified, the request will contain a header “X-Telegram-Bot-Api-Secret-Token” with the secret token as content.
Notes
- You will not be able to receive updates using getUpdates for as long as an outgoing webhook is set up.
- To use a self-signed certificate, you need to upload your public key certificate using certificate parameter. Please upload as InputFile, sending a String will not work.
- Ports currently supported for Webhooks: 443, 80, 88, 8443.
If you're having any trouble setting up webhooks, please check out this amazing guide to Webhooks.
Implementation
Future<bool> setWebhook(String url,
{String? ipAddress,
io.File? certificate,
int? maxConnections,
List<String>? allowedUpdates,
bool? dropPendingUpdates,
String? secretToken}) async {
var requestUrl = _apiUri('setWebhook');
var body = <String, dynamic>{
'url': url,
'ip_address': ipAddress,
'max_connections': maxConnections,
'allowed_updates':
allowedUpdates == null ? null : jsonEncode(allowedUpdates),
'drop_pending_updates': dropPendingUpdates,
'secret_token': secretToken,
};
if (certificate != null) {
// filename cannot be empty to post to Telegram server
var files = <MultipartFile>[];
files.add(MultipartFile(
'certificate', certificate.openRead(), certificate.lengthSync(),
filename: '${certificate.lengthSync()}'));
return await HttpClient.httpMultipartPost(requestUrl, files, body: body);
} else {
return await HttpClient.httpPost(requestUrl, body: body);
}
}