2019-10-04 03:35:06 -07:00
import {
IExecuteFunctions ,
} from 'n8n-core' ;
import {
2021-09-27 15:47:39 -07:00
IBinaryData ,
2021-09-11 01:15:36 -07:00
ICredentialsDecrypted ,
ICredentialTestFunctions ,
2019-10-04 03:35:06 -07:00
IDataObject ,
INodeExecutionData ,
INodeType ,
2020-10-01 05:01:39 -07:00
INodeTypeDescription ,
2021-09-11 01:15:36 -07:00
NodeCredentialTestResult ,
2021-04-16 09:33:36 -07:00
NodeOperationError ,
2019-10-04 03:35:06 -07:00
} from 'n8n-workflow' ;
import {
addAdditionalFields ,
2020-10-01 05:01:39 -07:00
apiRequest ,
2021-09-27 15:47:39 -07:00
getPropertyName ,
2019-10-04 03:35:06 -07:00
} from './GenericFunctions' ;
export class Telegram implements INodeType {
description : INodeTypeDescription = {
displayName : 'Telegram' ,
name : 'telegram' ,
2021-02-04 00:50:39 -08:00
icon : 'file:telegram.svg' ,
2019-10-04 03:35:06 -07:00
group : [ 'output' ] ,
version : 1 ,
subtitle : '={{$parameter["operation"] + ": " + $parameter["resource"]}}' ,
2021-07-03 05:40:16 -07:00
description : 'Sends data to Telegram' ,
2019-10-04 03:35:06 -07:00
defaults : {
name : 'Telegram' ,
color : '#0088cc' ,
} ,
inputs : [ 'main' ] ,
outputs : [ 'main' ] ,
credentials : [
{
name : 'telegramApi' ,
required : true ,
2021-09-11 01:15:36 -07:00
testedBy : 'telegramBotTest' ,
2020-10-22 06:46:03 -07:00
} ,
2019-10-04 03:35:06 -07:00
] ,
properties : [
{
displayName : 'Resource' ,
name : 'resource' ,
type : 'options' ,
options : [
2021-01-04 17:18:51 -08:00
// {
// name: 'Bot',
// value: 'bot',
// },
2019-10-04 03:35:06 -07:00
{
name : 'Chat' ,
value : 'chat' ,
} ,
{
name : 'Callback' ,
value : 'callback' ,
} ,
2020-12-29 04:28:50 -08:00
{
name : 'File' ,
value : 'file' ,
} ,
2019-10-04 03:35:06 -07:00
{
name : 'Message' ,
value : 'message' ,
2020-10-22 06:46:03 -07:00
} ,
2019-10-04 03:35:06 -07:00
] ,
default : 'message' ,
description : 'The resource to operate on.' ,
} ,
2020-12-30 06:58:52 -08:00
// ----------------------------------
// operation
// ----------------------------------
2019-10-04 03:35:06 -07:00
2021-01-04 17:18:51 -08:00
// {
// displayName: 'Operation',
// name: 'operation',
// type: 'options',
// displayOptions: {
// show: {
// resource: [
// 'bot',
// ],
// },
// },
// options: [
// {
// name: 'Info',
// value: 'info',
// description: 'Get information about the bot associated with the access token.',
// },
// ],
// default: 'info',
// description: 'The operation to perform.',
// },
2019-10-04 03:35:06 -07:00
// ----------------------------------
// operation
// ----------------------------------
{
displayName : 'Operation' ,
name : 'operation' ,
type : 'options' ,
displayOptions : {
show : {
resource : [
'chat' ,
] ,
} ,
} ,
options : [
{
name : 'Get' ,
value : 'get' ,
description : 'Get up to date information about a chat.' ,
} ,
{
name : 'Leave' ,
value : 'leave' ,
description : 'Leave a group, supergroup or channel.' ,
} ,
{
name : 'Member' ,
value : 'member' ,
description : 'Get the member of a chat.' ,
} ,
{
name : 'Set Description' ,
value : 'setDescription' ,
description : 'Set the description of a chat.' ,
} ,
{
name : 'Set Title' ,
value : 'setTitle' ,
description : 'Set the title of a chat.' ,
} ,
] ,
default : 'get' ,
description : 'The operation to perform.' ,
} ,
{
displayName : 'Operation' ,
name : 'operation' ,
type : 'options' ,
displayOptions : {
show : {
resource : [
'callback' ,
] ,
} ,
} ,
options : [
{
name : 'Answer Query' ,
value : 'answerQuery' ,
description : 'Send answer to callback query sent from inline keyboard.' ,
} ,
2021-03-24 10:51:00 -07:00
{
name : 'Answer Inline Query' ,
value : 'answerInlineQuery' ,
description : 'Send answer to callback query sent from inline bot.' ,
} ,
2019-10-04 03:35:06 -07:00
] ,
default : 'answerQuery' ,
description : 'The operation to perform.' ,
} ,
2020-12-29 04:28:50 -08:00
{
displayName : 'Operation' ,
name : 'operation' ,
type : 'options' ,
displayOptions : {
show : {
resource : [
'file' ,
] ,
} ,
} ,
options : [
{
name : 'Get' ,
value : 'get' ,
description : 'Get a file.' ,
} ,
] ,
default : 'get' ,
description : 'The operation to perform.' ,
} ,
2019-10-04 03:35:06 -07:00
{
displayName : 'Operation' ,
name : 'operation' ,
type : 'options' ,
displayOptions : {
show : {
resource : [
'message' ,
] ,
} ,
} ,
options : [
2021-07-10 03:36:21 -07:00
{
name : 'Delete Chat Message' ,
value : 'deleteMessage' ,
description : 'Delete a chat message' ,
} ,
2019-10-06 01:07:19 -07:00
{
name : 'Edit Message Text' ,
value : 'editMessageText' ,
description : 'Edit a text message' ,
} ,
2021-02-04 00:50:39 -08:00
{
name : 'Pin Chat Message' ,
value : 'pinChatMessage' ,
description : 'Pin a chat message' ,
} ,
2020-09-04 01:30:49 -07:00
{
name : 'Send Animation' ,
value : 'sendAnimation' ,
description : 'Send an animated file' ,
} ,
2019-10-04 03:35:06 -07:00
{
name : 'Send Audio' ,
value : 'sendAudio' ,
description : 'Send a audio file' ,
} ,
{
name : 'Send Chat Action' ,
value : 'sendChatAction' ,
description : 'Send a chat action' ,
} ,
{
name : 'Send Document' ,
value : 'sendDocument' ,
description : 'Send a document' ,
} ,
2021-02-19 03:33:20 -08:00
{
name : 'Send Location' ,
value : 'sendLocation' ,
2021-02-21 12:51:39 -08:00
description : 'Send a location' ,
2021-02-19 03:33:20 -08:00
} ,
2019-12-13 11:05:21 -08:00
{
name : 'Send Media Group' ,
value : 'sendMediaGroup' ,
description : 'Send group of photos or videos to album' ,
} ,
2021-07-10 03:36:21 -07:00
{
name : 'Send Message' ,
value : 'sendMessage' ,
description : 'Send a text message' ,
} ,
2019-10-04 03:35:06 -07:00
{
name : 'Send Photo' ,
value : 'sendPhoto' ,
description : 'Send a photo' ,
} ,
{
name : 'Send Sticker' ,
value : 'sendSticker' ,
description : 'Send a sticker' ,
} ,
{
name : 'Send Video' ,
value : 'sendVideo' ,
description : 'Send a video' ,
} ,
2021-07-10 03:36:21 -07:00
{
name : 'Unpin Chat Message' ,
value : 'unpinChatMessage' ,
description : 'Unpin a chat message' ,
} ,
2019-10-04 03:35:06 -07:00
] ,
default : 'sendMessage' ,
description : 'The operation to perform.' ,
} ,
// ----------------------------------
// chat / message
// ----------------------------------
{
displayName : 'Chat ID' ,
name : 'chatId' ,
type : 'string' ,
default : '' ,
displayOptions : {
show : {
2019-10-06 01:07:19 -07:00
operation : [
2021-07-10 03:36:21 -07:00
'deleteMessage' ,
2019-11-30 12:50:36 -08:00
'get' ,
'leave' ,
'member' ,
2021-02-04 00:50:39 -08:00
'pinChatMessage' ,
2019-11-30 12:50:36 -08:00
'setDescription' ,
'setTitle' ,
2020-09-04 01:30:49 -07:00
'sendAnimation' ,
2019-10-06 01:07:19 -07:00
'sendAudio' ,
'sendChatAction' ,
'sendDocument' ,
2021-02-19 03:33:20 -08:00
'sendLocation' ,
2019-10-06 01:07:19 -07:00
'sendMessage' ,
2019-12-13 11:05:21 -08:00
'sendMediaGroup' ,
2019-10-06 01:07:19 -07:00
'sendPhoto' ,
'sendSticker' ,
'sendVideo' ,
2021-07-10 03:36:21 -07:00
'unpinChatMessage' ,
2019-10-06 01:07:19 -07:00
] ,
2019-10-04 03:35:06 -07:00
resource : [
'chat' ,
'message' ,
] ,
} ,
} ,
required : true ,
2021-10-27 13:00:13 -07:00
description : 'Unique identifier for the target chat or username of the target channel (in the format @channelusername).' ,
2019-10-04 03:35:06 -07:00
} ,
2021-07-10 03:36:21 -07:00
// ----------------------------------
// message:deleteMessage
// ----------------------------------
{
displayName : 'Message ID' ,
name : 'messageId' ,
type : 'string' ,
default : '' ,
displayOptions : {
show : {
operation : [
'deleteMessage' ,
] ,
resource : [
'message' ,
] ,
} ,
} ,
required : true ,
description : 'Unique identifier of the message to delete.' ,
} ,
2021-02-04 00:50:39 -08:00
// ----------------------------------
// message:pinChatMessage
// ----------------------------------
{
displayName : 'Message ID' ,
name : 'messageId' ,
type : 'string' ,
default : '' ,
displayOptions : {
show : {
operation : [
'pinChatMessage' ,
'unpinChatMessage' ,
] ,
resource : [
'message' ,
] ,
} ,
} ,
required : true ,
description : 'Unique identifier of the message to pin or unpin.' ,
} ,
{
displayName : 'Additional Fields' ,
name : 'additionalFields' ,
type : 'collection' ,
placeholder : 'Add Field' ,
displayOptions : {
show : {
operation : [
'pinChatMessage' ,
] ,
resource : [
'message' ,
] ,
} ,
} ,
default : { } ,
options : [
{
displayName : 'Disable Notification' ,
name : 'disable_notification' ,
type : 'boolean' ,
default : false ,
description : 'Do not send a notification to all chat members about the new pinned message.' ,
} ,
] ,
} ,
2019-10-04 03:35:06 -07:00
// ----------------------------------
// chat
// ----------------------------------
// ----------------------------------
// chat:member
// ----------------------------------
{
displayName : 'User ID' ,
name : 'userId' ,
type : 'string' ,
default : '' ,
displayOptions : {
show : {
operation : [
2020-10-22 06:46:03 -07:00
'member' ,
2019-10-04 03:35:06 -07:00
] ,
resource : [
'chat' ,
] ,
} ,
} ,
required : true ,
description : 'Unique identifier of the target user.' ,
} ,
// ----------------------------------
// chat:setDescription
// ----------------------------------
{
displayName : 'Description' ,
name : 'description' ,
type : 'string' ,
default : '' ,
displayOptions : {
show : {
operation : [
2020-10-22 06:46:03 -07:00
'setDescription' ,
2019-10-04 03:35:06 -07:00
] ,
resource : [
'chat' ,
] ,
} ,
} ,
required : true ,
description : 'New chat description, 0-255 characters.' ,
} ,
// ----------------------------------
// chat:setTitle
// ----------------------------------
{
displayName : 'Title' ,
name : 'title' ,
type : 'string' ,
default : '' ,
displayOptions : {
show : {
operation : [
2020-10-22 06:46:03 -07:00
'setTitle' ,
2019-10-04 03:35:06 -07:00
] ,
resource : [
'chat' ,
] ,
} ,
} ,
required : true ,
description : 'New chat title, 1-255 characters.' ,
} ,
// ----------------------------------
// callback
// ----------------------------------
// ----------------------------------
// callback:answerQuery
// ----------------------------------
{
displayName : 'Query ID' ,
name : 'queryId' ,
type : 'string' ,
default : '' ,
displayOptions : {
show : {
operation : [
2020-10-22 06:46:03 -07:00
'answerQuery' ,
2019-10-04 03:35:06 -07:00
] ,
resource : [
'callback' ,
] ,
} ,
} ,
required : true ,
description : 'Unique identifier for the query to be answered.' ,
} ,
{
displayName : 'Additional Fields' ,
name : 'additionalFields' ,
type : 'collection' ,
placeholder : 'Add Field' ,
displayOptions : {
show : {
operation : [
2020-10-22 06:46:03 -07:00
'answerQuery' ,
2019-10-04 03:35:06 -07:00
] ,
resource : [
'callback' ,
] ,
} ,
} ,
default : { } ,
options : [
{
displayName : 'Cache Time' ,
name : 'cache_time' ,
type : 'number' ,
typeOptions : {
minValue : 0 ,
} ,
default : 0 ,
description : 'The maximum amount of time in seconds that the result of the callback query may be cached client-side.' ,
} ,
{
displayName : 'Show Alert' ,
name : 'show_alert' ,
type : 'boolean' ,
default : false ,
description : 'If true, an alert will be shown by the client instead of a notification at the top of the chat screen.' ,
} ,
{
displayName : 'Text' ,
name : 'text' ,
type : 'string' ,
typeOptions : {
alwaysOpenEditWindow : true ,
} ,
default : '' ,
description : 'Text of the notification. If not specified, nothing will be shown to the user, 0-200 characters.' ,
} ,
{
displayName : 'URL' ,
name : 'url' ,
type : 'string' ,
default : '' ,
description : 'URL that will be opened by the user\'s client.' ,
} ,
] ,
} ,
2021-03-24 10:51:00 -07:00
// -----------------------------------------------
// callback:answerInlineQuery
// -----------------------------------------------
{
displayName : 'Query ID' ,
name : 'queryId' ,
type : 'string' ,
default : '' ,
displayOptions : {
show : {
operation : [
'answerInlineQuery' ,
] ,
resource : [
'callback' ,
] ,
} ,
} ,
required : true ,
description : 'Unique identifier for the answered query.' ,
} ,
{
displayName : 'Results' ,
name : 'results' ,
type : 'string' ,
default : '' ,
displayOptions : {
show : {
operation : [
'answerInlineQuery' ,
] ,
resource : [
'callback' ,
] ,
} ,
} ,
required : true ,
description : 'A JSON-serialized array of results for the inline query.' ,
2021-03-24 10:51:43 -07:00
} ,
2021-03-24 10:51:00 -07:00
{
displayName : 'Additional Fields' ,
name : 'additionalFields' ,
type : 'collection' ,
placeholder : 'Add Field' ,
displayOptions : {
show : {
operation : [
'answerInlineQuery' ,
] ,
resource : [
'callback' ,
] ,
} ,
} ,
default : { } ,
options : [
{
displayName : 'Cache Time' ,
name : 'cache_time' ,
type : 'number' ,
typeOptions : {
minValue : 0 ,
} ,
default : 0 ,
description : 'The maximum amount of time in seconds that the result of the callback query may be cached client-side.' ,
} ,
{
displayName : 'Show Alert' ,
name : 'show_alert' ,
type : 'boolean' ,
default : false ,
description : 'If true, an alert will be shown by the client instead of a notification at the top of the chat screen.' ,
} ,
{
displayName : 'Text' ,
name : 'text' ,
type : 'string' ,
typeOptions : {
alwaysOpenEditWindow : true ,
} ,
default : '' ,
description : 'Text of the notification. If not specified, nothing will be shown to the user, 0-200 characters.' ,
} ,
{
displayName : 'URL' ,
name : 'url' ,
type : 'string' ,
default : '' ,
description : 'URL that will be opened by the user\'s client.' ,
} ,
] ,
} ,
2019-10-04 03:35:06 -07:00
2020-12-29 04:28:50 -08:00
// ----------------------------------
// file
// ----------------------------------
// ----------------------------------
// file:get/download
// ----------------------------------
{
displayName : 'File ID' ,
name : 'fileId' ,
type : 'string' ,
default : '' ,
displayOptions : {
show : {
operation : [
'get' ,
] ,
resource : [
'file' ,
] ,
} ,
} ,
required : true ,
description : 'The ID of the file.' ,
} ,
{
displayName : 'Download' ,
name : 'download' ,
type : 'boolean' ,
displayOptions : {
show : {
operation : [
'get' ,
] ,
resource : [
'file' ,
] ,
} ,
} ,
default : true ,
description : 'Download the file.' ,
} ,
2019-10-04 03:35:06 -07:00
// ----------------------------------
// message
// ----------------------------------
2019-10-06 01:07:19 -07:00
// ----------------------------------
// message:editMessageText
// ----------------------------------
{
displayName : 'Message Type' ,
name : 'messageType' ,
type : 'options' ,
displayOptions : {
show : {
operation : [
'editMessageText' ,
] ,
resource : [
'message' ,
] ,
} ,
} ,
options : [
{
name : 'Inline Message' ,
value : 'inlineMessage' ,
} ,
{
name : 'Message' ,
value : 'message' ,
} ,
] ,
default : 'message' ,
description : 'The type of the message to edit.' ,
} ,
{
displayName : 'Chat ID' ,
name : 'chatId' ,
type : 'string' ,
default : '' ,
displayOptions : {
show : {
messageType : [
2020-10-22 06:46:03 -07:00
'message' ,
2019-10-06 01:07:19 -07:00
] ,
operation : [
'editMessageText' ,
] ,
resource : [
'message' ,
] ,
} ,
} ,
required : true ,
2021-10-27 13:00:13 -07:00
description : 'Unique identifier for the target chat or username of the target channel (in the format @channelusername). To find your chat id ask @get_id_bot.' ,
2019-10-06 01:07:19 -07:00
} ,
2021-09-27 15:47:39 -07:00
// ----------------------------------
// message:sendAnimation/sendAudio/sendDocument/sendPhoto/sendSticker/sendVideo
// ----------------------------------
{
displayName : 'Binary Data' ,
name : 'binaryData' ,
type : 'boolean' ,
default : false ,
required : true ,
displayOptions : {
show : {
operation : [
'sendAnimation' ,
'sendAudio' ,
'sendDocument' ,
'sendPhoto' ,
'sendVideo' ,
'sendSticker' ,
] ,
resource : [
'message' ,
] ,
} ,
} ,
description : 'If the data to upload should be taken from binary field.' ,
} ,
{
displayName : 'Binary Property' ,
name : 'binaryPropertyName' ,
type : 'string' ,
default : 'data' ,
required : true ,
displayOptions : {
show : {
operation : [
'sendAnimation' ,
'sendAudio' ,
'sendDocument' ,
'sendPhoto' ,
'sendVideo' ,
'sendSticker' ,
] ,
resource : [
'message' ,
] ,
binaryData : [
true ,
] ,
} ,
} ,
placeholder : '' ,
description : 'Name of the binary property that contains the data to upload' ,
} ,
2019-10-06 01:07:19 -07:00
{
displayName : 'Message ID' ,
name : 'messageId' ,
type : 'string' ,
default : '' ,
displayOptions : {
show : {
messageType : [
2020-10-22 06:46:03 -07:00
'message' ,
2019-10-06 01:07:19 -07:00
] ,
operation : [
'editMessageText' ,
] ,
resource : [
'message' ,
] ,
} ,
} ,
required : true ,
description : 'Unique identifier of the message to edit.' ,
} ,
{
displayName : 'Inline Message ID' ,
name : 'inlineMessageId' ,
type : 'string' ,
default : '' ,
displayOptions : {
show : {
messageType : [
2020-10-22 06:46:03 -07:00
'inlineMessage' ,
2019-10-06 01:07:19 -07:00
] ,
operation : [
'editMessageText' ,
] ,
resource : [
'message' ,
] ,
} ,
} ,
required : true ,
description : 'Unique identifier of the inline message to edit.' ,
} ,
{
displayName : 'Reply Markup' ,
name : 'replyMarkup' ,
displayOptions : {
show : {
operation : [
'editMessageText' ,
] ,
resource : [
'message' ,
] ,
} ,
} ,
type : 'options' ,
options : [
{
name : 'None' ,
value : 'none' ,
} ,
{
name : 'Inline Keyboard' ,
value : 'inlineKeyboard' ,
} ,
] ,
default : 'none' ,
description : 'Additional interface options.' ,
} ,
2020-09-04 01:30:49 -07:00
// ----------------------------------
// message:sendAnimation
// ----------------------------------
{
displayName : 'Animation' ,
name : 'file' ,
type : 'string' ,
default : '' ,
displayOptions : {
show : {
operation : [
2020-10-22 06:46:03 -07:00
'sendAnimation' ,
2020-09-04 01:30:49 -07:00
] ,
resource : [
'message' ,
] ,
2021-09-27 15:47:39 -07:00
binaryData : [
false ,
] ,
2020-09-04 01:30:49 -07:00
} ,
} ,
2021-10-27 13:00:13 -07:00
description : 'Animation to send. Pass a file_id to send an animation that exists on the Telegram servers (recommended), an HTTP URL for Telegram to get an animation from the Internet' ,
2020-09-04 01:30:49 -07:00
} ,
2019-10-04 03:35:06 -07:00
// ----------------------------------
// message:sendAudio
// ----------------------------------
{
displayName : 'Audio' ,
name : 'file' ,
type : 'string' ,
default : '' ,
displayOptions : {
show : {
operation : [
2020-10-22 06:46:03 -07:00
'sendAudio' ,
2019-10-04 03:35:06 -07:00
] ,
resource : [
'message' ,
] ,
2021-09-27 15:47:39 -07:00
binaryData : [
false ,
] ,
2019-10-04 03:35:06 -07:00
} ,
} ,
2021-10-27 13:00:13 -07:00
description : 'Audio file to send. Pass a file_id to send a file that exists on the Telegram servers (recommended), an HTTP URL for Telegram to get a file from the Internet' ,
2019-10-04 03:35:06 -07:00
} ,
// ----------------------------------
// message:sendChatAction
// ----------------------------------
{
displayName : 'Action' ,
name : 'action' ,
type : 'options' ,
displayOptions : {
show : {
operation : [
2020-10-22 06:46:03 -07:00
'sendChatAction' ,
2019-10-04 03:35:06 -07:00
] ,
resource : [
'message' ,
] ,
} ,
} ,
options : [
{
name : 'Find Location' ,
value : 'find_location' ,
} ,
{
name : 'Record Audio' ,
value : 'record_audio' ,
} ,
{
name : 'Record Video' ,
value : 'record_video' ,
} ,
{
name : 'Record Video Note' ,
value : 'record_video_note' ,
} ,
{
name : 'Typing' ,
value : 'typing' ,
} ,
{
name : 'Upload Audio' ,
value : 'upload_audio' ,
} ,
{
name : 'Upload Document' ,
value : 'upload_document' ,
} ,
{
name : 'Upload Photo' ,
value : 'upload_photo' ,
} ,
{
name : 'Upload Video' ,
value : 'upload_video' ,
} ,
{
name : 'Upload Video Note' ,
value : 'upload_video_note' ,
} ,
] ,
default : 'typing' ,
2021-11-25 09:10:06 -08:00
description : 'Type of action to broadcast. Choose one, depending on what the user is about to receive. The status is set for 5 seconds or less (when a message arrives from your bot).' ,
2019-10-04 03:35:06 -07:00
} ,
// ----------------------------------
// message:sendDocument
// ----------------------------------
{
displayName : 'Document' ,
name : 'file' ,
type : 'string' ,
default : '' ,
displayOptions : {
show : {
operation : [
2020-10-22 06:46:03 -07:00
'sendDocument' ,
2019-10-04 03:35:06 -07:00
] ,
resource : [
'message' ,
] ,
2021-09-27 15:47:39 -07:00
binaryData : [
false ,
] ,
2019-10-04 03:35:06 -07:00
} ,
} ,
2021-10-27 13:00:13 -07:00
description : 'Document to send. Pass a file_id to send a file that exists on the Telegram servers (recommended), an HTTP URL for Telegram to get a file from the Internet' ,
2019-10-04 03:35:06 -07:00
} ,
2021-02-19 03:33:20 -08:00
// ----------------------------------
// message:sendLocation
// ----------------------------------
{
displayName : 'Latitude' ,
name : 'latitude' ,
type : 'number' ,
default : 0.0 ,
typeOptions : {
numberPrecision : 10 ,
minValue : - 90 ,
2021-02-21 12:51:39 -08:00
maxValue : 90 ,
2021-02-19 03:33:20 -08:00
} ,
displayOptions : {
show : {
operation : [
2021-02-21 12:51:39 -08:00
'sendLocation' ,
2021-02-19 03:33:20 -08:00
] ,
resource : [
2021-02-21 12:51:39 -08:00
'message' ,
] ,
} ,
2021-02-19 03:33:20 -08:00
} ,
2021-02-21 12:51:39 -08:00
description : 'Location latitude' ,
2021-02-19 03:33:20 -08:00
} ,
{
displayName : 'Longitude' ,
name : 'longitude' ,
type : 'number' ,
typeOptions : {
numberPrecision : 10 ,
minValue : - 180 ,
2021-02-21 12:51:39 -08:00
maxValue : 180 ,
2021-02-19 03:33:20 -08:00
} ,
default : 0.0 ,
displayOptions : {
show : {
operation : [
2021-02-21 12:51:39 -08:00
'sendLocation' ,
2021-02-19 03:33:20 -08:00
] ,
resource : [
2021-02-21 12:51:39 -08:00
'message' ,
] ,
} ,
2021-02-19 03:33:20 -08:00
} ,
2021-02-21 12:51:39 -08:00
description : 'Location longitude' ,
2021-02-19 03:33:20 -08:00
} ,
2019-12-13 11:05:21 -08:00
// ----------------------------------
// message:sendMediaGroup
// ----------------------------------
{
displayName : 'Media' ,
name : 'media' ,
type : 'fixedCollection' ,
displayOptions : {
show : {
operation : [
2020-10-22 06:46:03 -07:00
'sendMediaGroup' ,
2019-12-13 11:05:21 -08:00
] ,
resource : [
'message' ,
] ,
} ,
} ,
description : 'The media to add.' ,
placeholder : 'Add Media' ,
typeOptions : {
multipleValues : true ,
} ,
default : { } ,
options : [
{
displayName : 'Media' ,
name : 'media' ,
values : [
{
displayName : 'Type' ,
name : 'type' ,
type : 'options' ,
options : [
{
name : 'Photo' ,
value : 'photo' ,
} ,
{
name : 'Video' ,
value : 'video' ,
} ,
] ,
default : 'photo' ,
description : 'The type of the media to add.' ,
} ,
{
displayName : 'Media File' ,
name : 'media' ,
type : 'string' ,
default : '' ,
2021-10-27 13:00:13 -07:00
description : 'Media to send. Pass a file_id to send a file that exists on the Telegram servers (recommended) or pass an HTTP URL for Telegram to get a file from the Internet.' ,
2019-12-13 11:05:21 -08:00
} ,
{
displayName : 'Additional Fields' ,
name : 'additionalFields' ,
type : 'collection' ,
placeholder : 'Add Field' ,
default : { } ,
options : [
{
displayName : 'Caption' ,
name : 'caption' ,
type : 'string' ,
typeOptions : {
alwaysOpenEditWindow : true ,
} ,
default : '' ,
description : 'Caption text to set, 0-1024 characters.' ,
} ,
{
displayName : 'Parse Mode' ,
name : 'parse_mode' ,
type : 'options' ,
options : [
{
name : 'Markdown' ,
value : 'Markdown' ,
} ,
{
name : 'HTML' ,
value : 'HTML' ,
} ,
] ,
default : 'HTML' ,
description : 'How to parse the text.' ,
} ,
] ,
} ,
] ,
} ,
] ,
} ,
2019-10-04 03:35:06 -07:00
// ----------------------------------
// message:sendMessage
// ----------------------------------
{
displayName : 'Text' ,
name : 'text' ,
type : 'string' ,
required : true ,
typeOptions : {
alwaysOpenEditWindow : true ,
} ,
default : '' ,
displayOptions : {
show : {
operation : [
2019-10-06 01:07:19 -07:00
'editMessageText' ,
'sendMessage' ,
2019-10-04 03:35:06 -07:00
] ,
resource : [
'message' ,
] ,
} ,
} ,
description : 'Text of the message to be sent.' ,
} ,
// ----------------------------------
// message:sendPhoto
// ----------------------------------
{
displayName : 'Photo' ,
name : 'file' ,
type : 'string' ,
default : '' ,
displayOptions : {
show : {
operation : [
2020-10-22 06:46:03 -07:00
'sendPhoto' ,
2019-10-04 03:35:06 -07:00
] ,
resource : [
'message' ,
] ,
2021-09-27 15:47:39 -07:00
binaryData : [
false ,
] ,
2019-10-04 03:35:06 -07:00
} ,
} ,
2021-10-27 13:00:13 -07:00
description : 'Photo to send. Pass a file_id to send a photo that exists on the Telegram servers (recommended), an HTTP URL for Telegram to get a photo from the Internet' ,
2019-10-04 03:35:06 -07:00
} ,
// ----------------------------------
// message:sendSticker
// ----------------------------------
{
displayName : 'Sticker' ,
name : 'file' ,
type : 'string' ,
default : '' ,
displayOptions : {
show : {
operation : [
2020-10-22 06:46:03 -07:00
'sendSticker' ,
2019-10-04 03:35:06 -07:00
] ,
resource : [
'message' ,
] ,
2021-09-27 15:47:39 -07:00
binaryData : [
false ,
] ,
2019-10-04 03:35:06 -07:00
} ,
} ,
2021-10-27 13:00:13 -07:00
description : 'Sticker to send. Pass a file_id to send a file that exists on the Telegram servers (recommended), an HTTP URL for Telegram to get a .webp file from the Internet' ,
2019-10-04 03:35:06 -07:00
} ,
// ----------------------------------
// message:sendVideo
// ----------------------------------
{
displayName : 'Video' ,
name : 'file' ,
type : 'string' ,
default : '' ,
displayOptions : {
show : {
operation : [
2020-10-22 06:46:03 -07:00
'sendVideo' ,
2019-10-04 03:35:06 -07:00
] ,
resource : [
'message' ,
] ,
2021-09-27 15:47:39 -07:00
binaryData : [
false ,
] ,
2019-10-04 03:35:06 -07:00
} ,
} ,
2021-10-27 13:00:13 -07:00
description : 'Video file to send. Pass a file_id to send a file that exists on the Telegram servers (recommended), an HTTP URL for Telegram to get a file from the Internet' ,
2019-10-04 03:35:06 -07:00
} ,
// ----------------------------------
2021-02-19 03:33:20 -08:00
// message:editMessageText/sendAnimation/sendAudio/sendLocation/sendMessage/sendPhoto/sendSticker/sendVideo
2019-10-04 03:35:06 -07:00
// ----------------------------------
{
displayName : 'Reply Markup' ,
name : 'replyMarkup' ,
displayOptions : {
show : {
operation : [
2020-09-04 01:30:49 -07:00
'sendAnimation' ,
2019-10-04 03:35:06 -07:00
'sendDocument' ,
'sendMessage' ,
'sendPhoto' ,
'sendSticker' ,
'sendVideo' ,
2020-12-30 06:58:52 -08:00
'sendAudio' ,
2021-02-21 12:51:39 -08:00
'sendLocation' ,
2019-10-04 03:35:06 -07:00
] ,
resource : [
'message' ,
] ,
} ,
} ,
type : 'options' ,
options : [
{
name : 'None' ,
value : 'none' ,
} ,
{
name : 'Force Reply' ,
value : 'forceReply' ,
} ,
{
name : 'Inline Keyboard' ,
value : 'inlineKeyboard' ,
} ,
{
name : 'Reply Keyboard' ,
value : 'replyKeyboard' ,
} ,
{
name : 'Reply Keyboard Remove' ,
value : 'replyKeyboardRemove' ,
} ,
] ,
default : 'none' ,
description : 'Additional interface options.' ,
} ,
{
displayName : 'Force Reply' ,
name : 'forceReply' ,
type : 'collection' ,
placeholder : 'Add Field' ,
displayOptions : {
show : {
replyMarkup : [
'forceReply' ,
] ,
resource : [
'message' ,
] ,
} ,
} ,
default : { } ,
options : [
{
displayName : 'Force Reply' ,
name : 'force_reply' ,
type : 'boolean' ,
default : false ,
description : 'Shows reply interface to the user, as if they manually selected the bot‘ s message and tapped ’ Reply.' ,
} ,
{
displayName : 'Selective' ,
name : 'selective' ,
type : 'boolean' ,
default : false ,
description : ' Use this parameter if you want to force reply from specific users only.' ,
} ,
] ,
} ,
{
displayName : 'Inline Keyboard' ,
name : 'inlineKeyboard' ,
placeholder : 'Add Keyboard Row' ,
description : 'Adds an inline keyboard that appears right next to the message it belongs to.' ,
type : 'fixedCollection' ,
typeOptions : {
multipleValues : true ,
} ,
displayOptions : {
show : {
replyMarkup : [
'inlineKeyboard' ,
] ,
resource : [
'message' ,
] ,
} ,
} ,
default : { } ,
options : [
{
displayName : 'Rows' ,
name : 'rows' ,
values : [
{
displayName : 'Row' ,
name : 'row' ,
type : 'fixedCollection' ,
description : 'The value to set.' ,
placeholder : 'Add Button' ,
typeOptions : {
multipleValues : true ,
} ,
default : { } ,
options : [
{
displayName : 'Buttons' ,
name : 'buttons' ,
values : [
{
displayName : 'Text' ,
name : 'text' ,
type : 'string' ,
default : '' ,
description : 'Label text on the button.' ,
} ,
{
displayName : 'Additional Fields' ,
name : 'additionalFields' ,
type : 'collection' ,
placeholder : 'Add Field' ,
default : { } ,
options : [
{
displayName : 'Callback Data' ,
name : 'callback_data' ,
type : 'string' ,
default : '' ,
description : 'Data to be sent in a callback query to the bot when button is pressed, 1-64 bytes.' ,
} ,
{
displayName : 'Pay' ,
name : 'pay' ,
type : 'boolean' ,
default : false ,
description : 'Specify True, to send a Pay button.' ,
} ,
{
displayName : 'Switch Inline Query Current Chat' ,
name : 'switch_inline_query_current_chat' ,
type : 'string' ,
default : '' ,
2021-10-27 13:00:13 -07:00
description : 'If set, pressing the button will insert the bot‘ s username and the specified inline query in the current chat\'s input field.Can be empty, in which case only the bot’ s username will be inserted.' ,
2019-10-04 03:35:06 -07:00
} ,
{
displayName : 'Switch Inline Query' ,
name : 'switch_inline_query' ,
type : 'string' ,
default : '' ,
2021-10-27 13:00:13 -07:00
description : 'If set, pressing the button will prompt the user to select one of their chats, open that chat and insert the bot‘ s username and the specified inline query in the input field. Can be empty, in which case just the bot’ s username will be inserted.' ,
2019-10-04 03:35:06 -07:00
} ,
{
displayName : 'URL' ,
name : 'url' ,
type : 'string' ,
default : '' ,
description : 'HTTP or tg:// url to be opened when button is pressed.' ,
} ,
] ,
} ,
] ,
} ,
] ,
} ,
] ,
} ,
] ,
} ,
{
displayName : 'Reply Keyboard' ,
name : 'replyKeyboard' ,
placeholder : 'Add Reply Keyboard Row' ,
description : 'Adds a custom keyboard with reply options.' ,
type : 'fixedCollection' ,
typeOptions : {
multipleValues : true ,
} ,
displayOptions : {
show : {
replyMarkup : [
'replyKeyboard' ,
] ,
} ,
} ,
default : { } ,
options : [
{
displayName : 'Rows' ,
name : 'rows' ,
values : [
{
displayName : 'Row' ,
name : 'row' ,
type : 'fixedCollection' ,
description : 'The value to set.' ,
placeholder : 'Add Button' ,
typeOptions : {
multipleValues : true ,
} ,
default : { } ,
options : [
{
displayName : 'Buttons' ,
name : 'buttons' ,
values : [
{
displayName : 'Text' ,
name : 'text' ,
type : 'string' ,
default : '' ,
description : 'Text of the button. If none of the optional fields are used, it will be sent as a message when the button is pressed.' ,
} ,
{
displayName : 'Additional Fields' ,
name : 'additionalFields' ,
type : 'collection' ,
placeholder : 'Add Field' ,
default : { } ,
options : [
{
displayName : 'Request Contact' ,
name : 'request_contact' ,
type : 'boolean' ,
default : false ,
description : 'If True, the user\'s phone number will be sent as a contact when the button is pressed.Available in private chats only.' ,
} ,
{
displayName : 'Request Location' ,
name : 'request_location' ,
type : 'boolean' ,
default : false ,
description : 'If True, the user\'s request_location.' ,
} ,
] ,
} ,
] ,
} ,
] ,
} ,
] ,
} ,
] ,
} ,
{
displayName : 'Reply Keyboard Options' ,
name : 'replyKeyboardOptions' ,
type : 'collection' ,
placeholder : 'Add Option' ,
displayOptions : {
show : {
replyMarkup : [
'replyKeyboard' ,
] ,
} ,
} ,
default : { } ,
options : [
{
displayName : 'Resize Keyboard' ,
name : 'resize_keyboard' ,
type : 'boolean' ,
default : false ,
description : 'Requests clients to resize the keyboard vertically for optimal fit.' ,
} ,
{
displayName : 'One Time Keyboard' ,
name : 'one_time_keyboard' ,
type : 'boolean' ,
default : false ,
description : 'Requests clients to hide the keyboard as soon as it\'s been used.' ,
} ,
{
displayName : 'Selective' ,
name : 'selective' ,
type : 'boolean' ,
default : false ,
description : 'Use this parameter if you want to show the keyboard to specific users only.' ,
} ,
] ,
} ,
{
displayName : 'Reply Keyboard Remove' ,
name : 'replyKeyboardRemove' ,
type : 'collection' ,
placeholder : 'Add Field' ,
displayOptions : {
show : {
replyMarkup : [
'replyKeyboardRemove' ,
] ,
} ,
} ,
default : { } ,
options : [
{
displayName : 'Remove Keyboard' ,
name : 'remove_keyboard' ,
type : 'boolean' ,
default : false ,
description : 'Requests clients to remove the custom keyboard.' ,
} ,
{
displayName : 'Selective' ,
name : 'selective' ,
type : 'boolean' ,
default : false ,
description : ' Use this parameter if you want to force reply from specific users only.' ,
} ,
] ,
} ,
{
displayName : 'Additional Fields' ,
name : 'additionalFields' ,
type : 'collection' ,
placeholder : 'Add Field' ,
displayOptions : {
show : {
operation : [
2019-10-06 01:07:19 -07:00
'editMessageText' ,
2020-09-04 01:30:49 -07:00
'sendAnimation' ,
2020-12-29 02:55:31 -08:00
'sendAudio' ,
2019-10-04 03:35:06 -07:00
'sendDocument' ,
2021-02-19 03:33:20 -08:00
'sendLocation' ,
2019-10-04 03:35:06 -07:00
'sendMessage' ,
2019-12-13 11:05:21 -08:00
'sendMediaGroup' ,
2019-10-04 03:35:06 -07:00
'sendPhoto' ,
'sendSticker' ,
'sendVideo' ,
] ,
resource : [
'message' ,
] ,
} ,
} ,
default : { } ,
options : [
{
displayName : 'Caption' ,
name : 'caption' ,
type : 'string' ,
typeOptions : {
alwaysOpenEditWindow : true ,
} ,
displayOptions : {
show : {
'/operation' : [
2020-09-04 01:30:49 -07:00
'sendAnimation' ,
2019-10-04 03:35:06 -07:00
'sendAudio' ,
'sendDocument' ,
'sendPhoto' ,
'sendVideo' ,
] ,
} ,
} ,
default : '' ,
description : 'Caption text to set, 0-1024 characters.' ,
} ,
{
displayName : 'Disable Notification' ,
name : 'disable_notification' ,
type : 'boolean' ,
default : false ,
2019-10-06 01:07:19 -07:00
displayOptions : {
hide : {
'/operation' : [
'editMessageText' ,
] ,
} ,
} ,
2019-10-04 03:35:06 -07:00
description : 'Sends the message silently. Users will receive a notification with no sound.' ,
} ,
{
displayName : 'Disable WebPage Preview' ,
name : 'disable_web_page_preview' ,
type : 'boolean' ,
displayOptions : {
show : {
'/operation' : [
2019-10-06 01:07:19 -07:00
'editMessageText' ,
2019-10-04 03:35:06 -07:00
'sendMessage' ,
] ,
} ,
} ,
default : false ,
description : 'Disables link previews for links in this message.' ,
} ,
{
displayName : 'Duration' ,
name : 'duration' ,
type : 'number' ,
typeOptions : {
minValue : 0 ,
} ,
displayOptions : {
show : {
'/operation' : [
2020-09-04 01:30:49 -07:00
'sendAnimation' ,
2019-10-04 03:35:06 -07:00
'sendAudio' ,
'sendVideo' ,
] ,
} ,
} ,
default : 0 ,
description : 'Duration of clip in seconds.' ,
} ,
{
displayName : 'Height' ,
name : 'height' ,
type : 'number' ,
typeOptions : {
minValue : 0 ,
} ,
displayOptions : {
show : {
'/operation' : [
2020-09-04 01:30:49 -07:00
'sendAnimation' ,
2019-10-04 03:35:06 -07:00
'sendVideo' ,
] ,
} ,
} ,
default : 0 ,
description : 'Height of the video.' ,
} ,
{
displayName : 'Parse Mode' ,
name : 'parse_mode' ,
type : 'options' ,
options : [
{
name : 'Markdown' ,
value : 'Markdown' ,
} ,
{
name : 'HTML' ,
value : 'HTML' ,
} ,
] ,
displayOptions : {
show : {
'/operation' : [
2019-10-06 01:07:19 -07:00
'editMessageText' ,
2020-09-04 01:30:49 -07:00
'sendAnimation' ,
2019-10-04 03:35:06 -07:00
'sendAudio' ,
'sendMessage' ,
'sendPhoto' ,
'sendVideo' ,
] ,
} ,
} ,
default : 'HTML' ,
description : 'How to parse the text.' ,
} ,
{
displayName : 'Performer' ,
name : 'performer' ,
type : 'string' ,
displayOptions : {
show : {
'/operation' : [
'sendAudio' ,
] ,
} ,
} ,
default : '' ,
description : 'Name of the performer.' ,
} ,
{
displayName : 'Reply To Message ID' ,
name : 'reply_to_message_id' ,
type : 'number' ,
2019-10-06 01:07:19 -07:00
displayOptions : {
hide : {
'/operation' : [
'editMessageText' ,
] ,
} ,
} ,
2019-10-04 03:35:06 -07:00
default : 0 ,
description : 'If the message is a reply, ID of the original message.' ,
} ,
{
displayName : 'Title' ,
name : 'title' ,
type : 'string' ,
typeOptions : {
alwaysOpenEditWindow : true ,
} ,
displayOptions : {
show : {
'/operation' : [
'sendAudio' ,
] ,
} ,
} ,
default : '' ,
description : 'Title of the track.' ,
} ,
{
displayName : 'Thumbnail' ,
name : 'thumb' ,
type : 'string' ,
displayOptions : {
show : {
'/operation' : [
2020-09-04 01:30:49 -07:00
'sendAnimation' ,
2019-10-04 03:35:06 -07:00
'sendAudio' ,
'sendDocument' ,
'sendVideo' ,
] ,
} ,
} ,
default : '' ,
2021-10-27 13:00:13 -07:00
description : 'Thumbnail of the file sent; can be ignored if thumbnail generation for the file is supported server-side. The thumbnail should be in JPEG format and less than 200 kB in size. A thumbnail‘ s width and height should not exceed 320.' ,
2019-10-04 03:35:06 -07:00
} ,
{
displayName : 'Width' ,
name : 'width' ,
type : 'number' ,
typeOptions : {
minValue : 0 ,
} ,
displayOptions : {
show : {
'/operation' : [
2020-09-04 01:30:49 -07:00
'sendAnimation' ,
2019-10-04 03:35:06 -07:00
'sendVideo' ,
] ,
} ,
} ,
default : 0 ,
description : 'Width of the video.' ,
} ,
] ,
} ,
] ,
} ;
2021-09-11 01:15:36 -07:00
methods = {
credentialTest : {
async telegramBotTest ( this : ICredentialTestFunctions , credential : ICredentialsDecrypted ) : Promise < NodeCredentialTestResult > {
const credentials = credential . data ;
const options = {
uri : ` https://api.telegram.org/bot ${ credentials ! . accessToken } /getMe ` ,
json : true ,
} ;
try {
const response = await this . helpers . request ( options ) ;
if ( ! response . ok ) {
return {
status : 'Error' ,
message : 'Token is not valid.' ,
} ;
}
2021-09-27 15:47:39 -07:00
} catch ( err ) {
2021-09-11 01:15:36 -07:00
return {
status : 'Error' ,
message : ` Token is not valid; ${ err . message } ` ,
} ;
}
return {
status : 'OK' ,
message : 'Authentication successful!' ,
} ;
2021-09-27 15:47:39 -07:00
2021-09-11 01:15:36 -07:00
} ,
} ,
} ;
2019-10-04 03:35:06 -07:00
async execute ( this : IExecuteFunctions ) : Promise < INodeExecutionData [ ] [ ] > {
const items = this . getInputData ( ) ;
2020-12-29 04:28:50 -08:00
const returnData : INodeExecutionData [ ] = [ ] ;
2019-10-04 03:35:06 -07:00
// For Post
let body : IDataObject ;
// For Query string
let qs : IDataObject ;
let requestMethod : string ;
let endpoint : string ;
const operation = this . getNodeParameter ( 'operation' , 0 ) as string ;
const resource = this . getNodeParameter ( 'resource' , 0 ) as string ;
2021-09-27 15:47:39 -07:00
const binaryData = this . getNodeParameter ( 'binaryData' , 0 , false ) as boolean ;
2019-10-04 03:35:06 -07:00
for ( let i = 0 ; i < items . length ; i ++ ) {
2021-07-19 23:58:54 -07:00
try {
// Reset all values
requestMethod = 'POST' ;
endpoint = '' ;
body = { } ;
qs = { } ;
2019-10-04 03:35:06 -07:00
2021-07-19 23:58:54 -07:00
if ( resource === 'callback' ) {
if ( operation === 'answerQuery' ) {
// ----------------------------------
// callback:answerQuery
// ----------------------------------
2019-10-04 03:35:06 -07:00
2021-07-19 23:58:54 -07:00
endpoint = 'answerCallbackQuery' ;
2019-10-04 03:35:06 -07:00
2021-07-19 23:58:54 -07:00
body . callback_query_id = this . getNodeParameter ( 'queryId' , i ) as string ;
2019-10-04 03:35:06 -07:00
2021-07-19 23:58:54 -07:00
// Add additional fields
const additionalFields = this . getNodeParameter ( 'additionalFields' , i ) as IDataObject ;
Object . assign ( body , additionalFields ) ;
2019-10-04 03:35:06 -07:00
2021-07-19 23:58:54 -07:00
} else if ( operation === 'answerInlineQuery' ) {
// -----------------------------------------------
// callback:answerInlineQuery
// -----------------------------------------------
2021-03-24 10:51:00 -07:00
2021-07-19 23:58:54 -07:00
endpoint = 'answerInlineQuery' ;
2021-03-24 10:51:43 -07:00
2021-07-19 23:58:54 -07:00
body . inline_query_id = this . getNodeParameter ( 'queryId' , i ) as string ;
body . results = this . getNodeParameter ( 'results' , i ) as string ;
2021-03-24 10:51:43 -07:00
2021-07-19 23:58:54 -07:00
// Add additional fields
const additionalFields = this . getNodeParameter ( 'additionalFields' , i ) as IDataObject ;
Object . assign ( body , additionalFields ) ;
}
2019-10-04 03:35:06 -07:00
2021-07-19 23:58:54 -07:00
} else if ( resource === 'chat' ) {
if ( operation === 'get' ) {
// ----------------------------------
// chat:get
// ----------------------------------
2020-12-29 04:28:50 -08:00
2021-07-19 23:58:54 -07:00
endpoint = 'getChat' ;
2020-12-29 04:28:50 -08:00
2021-07-19 23:58:54 -07:00
body . chat_id = this . getNodeParameter ( 'chatId' , i ) as string ;
2020-12-29 04:28:50 -08:00
2021-07-19 23:58:54 -07:00
} else if ( operation === 'leave' ) {
// ----------------------------------
// chat:leave
// ----------------------------------
2020-12-29 04:28:50 -08:00
2021-07-19 23:58:54 -07:00
endpoint = 'leaveChat' ;
2019-10-04 03:35:06 -07:00
2021-07-19 23:58:54 -07:00
body . chat_id = this . getNodeParameter ( 'chatId' , i ) as string ;
2019-10-06 01:07:19 -07:00
2021-07-19 23:58:54 -07:00
} else if ( operation === 'member' ) {
// ----------------------------------
// chat:member
// ----------------------------------
2019-10-06 01:07:19 -07:00
2021-07-19 23:58:54 -07:00
endpoint = 'getChatMember' ;
2019-10-06 01:07:19 -07:00
body . chat_id = this . getNodeParameter ( 'chatId' , i ) as string ;
2021-07-19 23:58:54 -07:00
body . user_id = this . getNodeParameter ( 'userId' , i ) as string ;
2019-10-06 01:07:19 -07:00
2021-07-19 23:58:54 -07:00
} else if ( operation === 'setDescription' ) {
// ----------------------------------
// chat:setDescription
// ----------------------------------
2019-10-06 01:07:19 -07:00
2021-07-19 23:58:54 -07:00
endpoint = 'setChatDescription' ;
2021-07-10 03:36:21 -07:00
2021-07-19 23:58:54 -07:00
body . chat_id = this . getNodeParameter ( 'chatId' , i ) as string ;
body . description = this . getNodeParameter ( 'description' , i ) as string ;
2021-07-10 03:36:21 -07:00
2021-07-19 23:58:54 -07:00
} else if ( operation === 'setTitle' ) {
// ----------------------------------
// chat:setTitle
// ----------------------------------
2021-02-04 00:50:39 -08:00
2021-07-19 23:58:54 -07:00
endpoint = 'setChatTitle' ;
2021-02-04 00:50:39 -08:00
2021-07-19 23:58:54 -07:00
body . chat_id = this . getNodeParameter ( 'chatId' , i ) as string ;
body . title = this . getNodeParameter ( 'title' , i ) as string ;
2021-02-04 00:50:39 -08:00
}
2021-07-19 23:58:54 -07:00
// } else if (resource === 'bot') {
// if (operation === 'info') {
// endpoint = 'getUpdates';
// }
} else if ( resource === 'file' ) {
2021-02-04 00:50:39 -08:00
2021-07-19 23:58:54 -07:00
if ( operation === 'get' ) {
// ----------------------------------
// file:get
// ----------------------------------
2021-02-19 03:33:20 -08:00
2021-07-19 23:58:54 -07:00
endpoint = 'getFile' ;
2021-02-19 03:33:20 -08:00
2021-07-19 23:58:54 -07:00
body . file_id = this . getNodeParameter ( 'fileId' , i ) as string ;
}
2019-12-13 11:05:21 -08:00
2021-07-19 23:58:54 -07:00
} else if ( resource === 'message' ) {
if ( operation === 'editMessageText' ) {
// ----------------------------------
// message:editMessageText
// ----------------------------------
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
endpoint = 'editMessageText' ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
const messageType = this . getNodeParameter ( 'messageType' , i ) as string ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
if ( messageType === 'inlineMessage' ) {
body . inline_message_id = this . getNodeParameter ( 'inlineMessageId' , i ) as string ;
} else {
body . chat_id = this . getNodeParameter ( 'chatId' , i ) as string ;
body . message_id = this . getNodeParameter ( 'messageId' , i ) as string ;
}
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
body . text = this . getNodeParameter ( 'text' , i ) as string ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
// Add additional fields and replyMarkup
addAdditionalFields . call ( this , body , i ) ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
} else if ( operation === 'deleteMessage' ) {
// ----------------------------------
// message:deleteMessage
// ----------------------------------
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
endpoint = 'deleteMessage' ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
body . chat_id = this . getNodeParameter ( 'chatId' , i ) as string ;
body . message_id = this . getNodeParameter ( 'messageId' , i ) as string ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
} else if ( operation === 'pinChatMessage' ) {
// ----------------------------------
// message:pinChatMessage
// ----------------------------------
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
endpoint = 'pinChatMessage' ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
body . chat_id = this . getNodeParameter ( 'chatId' , i ) as string ;
body . message_id = this . getNodeParameter ( 'messageId' , i ) as string ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
const { disable_notification } = this . getNodeParameter ( 'additionalFields' , i ) as IDataObject ;
if ( disable_notification ) {
body . disable_notification = true ;
}
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
} else if ( operation === 'unpinChatMessage' ) {
// ----------------------------------
// message:unpinChatMessage
// ----------------------------------
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
endpoint = 'unpinChatMessage' ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
body . chat_id = this . getNodeParameter ( 'chatId' , i ) as string ;
body . message_id = this . getNodeParameter ( 'messageId' , i ) as string ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
} else if ( operation === 'sendAnimation' ) {
// ----------------------------------
// message:sendAnimation
// ----------------------------------
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
endpoint = 'sendAnimation' ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
body . chat_id = this . getNodeParameter ( 'chatId' , i ) as string ;
2021-09-27 15:47:39 -07:00
body . animation = this . getNodeParameter ( 'file' , i , '' ) as string ;
2021-07-19 23:58:54 -07:00
// Add additional fields and replyMarkup
addAdditionalFields . call ( this , body , i ) ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
} else if ( operation === 'sendAudio' ) {
// ----------------------------------
// message:sendAudio
// ----------------------------------
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
endpoint = 'sendAudio' ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
body . chat_id = this . getNodeParameter ( 'chatId' , i ) as string ;
2021-09-27 15:47:39 -07:00
body . audio = this . getNodeParameter ( 'file' , i , '' ) as string ;
2021-07-19 23:58:54 -07:00
// Add additional fields and replyMarkup
addAdditionalFields . call ( this , body , i ) ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
} else if ( operation === 'sendChatAction' ) {
// ----------------------------------
// message:sendChatAction
// ----------------------------------
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
endpoint = 'sendChatAction' ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
body . chat_id = this . getNodeParameter ( 'chatId' , i ) as string ;
body . action = this . getNodeParameter ( 'action' , i ) as string ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
} else if ( operation === 'sendDocument' ) {
// ----------------------------------
// message:sendDocument
// ----------------------------------
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
endpoint = 'sendDocument' ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
body . chat_id = this . getNodeParameter ( 'chatId' , i ) as string ;
2021-09-27 15:47:39 -07:00
body . document = this . getNodeParameter ( 'file' , i , '' ) as string ;
2021-07-19 23:58:54 -07:00
// Add additional fields and replyMarkup
addAdditionalFields . call ( this , body , i ) ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
} else if ( operation === 'sendLocation' ) {
// ----------------------------------
// message:sendLocation
// ----------------------------------
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
endpoint = 'sendLocation' ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
body . chat_id = this . getNodeParameter ( 'chatId' , i ) as string ;
body . latitude = this . getNodeParameter ( 'latitude' , i ) as string ;
body . longitude = this . getNodeParameter ( 'longitude' , i ) as string ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
// Add additional fields and replyMarkup
addAdditionalFields . call ( this , body , i ) ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
} else if ( operation === 'sendMessage' ) {
// ----------------------------------
// message:sendMessage
// ----------------------------------
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
endpoint = 'sendMessage' ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
body . chat_id = this . getNodeParameter ( 'chatId' , i ) as string ;
body . text = this . getNodeParameter ( 'text' , i ) as string ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
// Add additional fields and replyMarkup
addAdditionalFields . call ( this , body , i ) ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
} else if ( operation === 'sendMediaGroup' ) {
// ----------------------------------
// message:sendMediaGroup
// ----------------------------------
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
endpoint = 'sendMediaGroup' ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
body . chat_id = this . getNodeParameter ( 'chatId' , i ) as string ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
const additionalFields = this . getNodeParameter ( 'additionalFields' , i ) as IDataObject ;
Object . assign ( body , additionalFields ) ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
const mediaItems = this . getNodeParameter ( 'media' , i ) as IDataObject ;
body . media = [ ] ;
for ( const mediaItem of mediaItems . media as IDataObject [ ] ) {
if ( mediaItem . additionalFields !== undefined ) {
Object . assign ( mediaItem , mediaItem . additionalFields ) ;
delete mediaItem . additionalFields ;
}
( body . media as IDataObject [ ] ) . push ( mediaItem ) ;
2019-12-13 11:05:21 -08:00
}
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
} else if ( operation === 'sendPhoto' ) {
// ----------------------------------
// message:sendPhoto
// ----------------------------------
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
endpoint = 'sendPhoto' ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
body . chat_id = this . getNodeParameter ( 'chatId' , i ) as string ;
2021-09-27 15:47:39 -07:00
body . photo = this . getNodeParameter ( 'file' , i , '' ) as string ;
2021-07-19 23:58:54 -07:00
// Add additional fields and replyMarkup
addAdditionalFields . call ( this , body , i ) ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
} else if ( operation === 'sendSticker' ) {
// ----------------------------------
// message:sendSticker
// ----------------------------------
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
endpoint = 'sendSticker' ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
body . chat_id = this . getNodeParameter ( 'chatId' , i ) as string ;
2021-09-27 15:47:39 -07:00
body . sticker = this . getNodeParameter ( 'file' , i , '' ) as string ;
2021-07-19 23:58:54 -07:00
// Add additional fields and replyMarkup
addAdditionalFields . call ( this , body , i ) ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
} else if ( operation === 'sendVideo' ) {
// ----------------------------------
// message:sendVideo
// ----------------------------------
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
endpoint = 'sendVideo' ;
2021-09-27 15:47:39 -07:00
2021-07-19 23:58:54 -07:00
body . chat_id = this . getNodeParameter ( 'chatId' , i ) as string ;
2021-09-27 15:47:39 -07:00
body . video = this . getNodeParameter ( 'file' , i , '' ) as string ;
2021-07-19 23:58:54 -07:00
// Add additional fields and replyMarkup
addAdditionalFields . call ( this , body , i ) ;
2019-12-13 11:05:21 -08:00
}
2021-07-19 23:58:54 -07:00
} else {
throw new NodeOperationError ( this . getNode ( ) , ` The resource " ${ resource } " is not known! ` ) ;
}
2019-12-13 11:05:21 -08:00
2021-09-27 15:47:39 -07:00
let responseData ;
if ( binaryData === true ) {
const binaryPropertyName = this . getNodeParameter ( 'binaryPropertyName' , 0 ) as string ;
const binaryData = items [ i ] . binary ! [ binaryPropertyName ] as IBinaryData ;
const dataBuffer = await this . helpers . getBinaryDataBuffer ( i , binaryPropertyName ) ;
const propertyName = getPropertyName ( operation ) ;
const formData = {
. . . body ,
[ propertyName ] : {
value : dataBuffer ,
options : {
filename : binaryData.fileName ,
contentType : binaryData.mimeType ,
} ,
} ,
} ;
responseData = await apiRequest . call ( this , requestMethod , endpoint , { } , qs , { formData } ) ;
} else {
responseData = await apiRequest . call ( this , requestMethod , endpoint , body , qs ) ;
}
2019-10-04 03:35:06 -07:00
2021-07-19 23:58:54 -07:00
if ( resource === 'file' && operation === 'get' ) {
if ( this . getNodeParameter ( 'download' , i , false ) as boolean === true ) {
const filePath = responseData . result . file_path ;
2019-10-04 03:35:06 -07:00
2021-08-20 09:57:30 -07:00
const credentials = await this . getCredentials ( 'telegramApi' ) ;
2020-12-29 04:28:50 -08:00
2021-07-19 23:58:54 -07:00
if ( credentials === undefined ) {
throw new NodeOperationError ( this . getNode ( ) , 'No credentials got returned!' ) ;
}
const file = await apiRequest . call ( this , 'GET' , '' , { } , { } , { json : false , encoding : null , uri : ` https://api.telegram.org/file/bot ${ credentials . accessToken } / ${ filePath } ` , resolveWithFullResponse : true } ) ;
2020-12-29 04:28:50 -08:00
2021-07-19 23:58:54 -07:00
const fileName = filePath . split ( '/' ) . pop ( ) ;
const binaryData = await this . helpers . prepareBinaryData ( Buffer . from ( file . body as string ) , fileName ) ;
2020-12-29 04:28:50 -08:00
2021-07-19 23:58:54 -07:00
returnData . push ( {
json : responseData ,
binary : {
data : binaryData ,
} ,
} ) ;
continue ;
2020-12-29 04:28:50 -08:00
}
2021-07-19 23:58:54 -07:00
}
2020-12-29 04:28:50 -08:00
2021-07-19 23:58:54 -07:00
// if (resource === 'bot' && operation === 'info') {
// responseData = {
// user: responseData.result[0].message.from,
// chat: responseData.result[0].message.chat,
// };
// }
returnData . push ( { json : responseData } ) ;
} catch ( error ) {
if ( this . continueOnFail ( ) ) {
returnData . push ( { json : { error : error.message } } ) ;
2020-12-29 04:28:50 -08:00
continue ;
}
2021-07-19 23:58:54 -07:00
throw error ;
2020-12-29 04:28:50 -08:00
}
2019-10-04 03:35:06 -07:00
}
2020-12-29 04:28:50 -08:00
return this . prepareOutputData ( returnData ) ;
2019-10-04 03:35:06 -07:00
}
}