Skip to content

Commit

Permalink
fix(Telegram Node): Fix sending binaryData media (photo, document, vi…
Browse files Browse the repository at this point in the history
…deo etc.) (#3408)

* fixed send media (photo, document, video etc.) issues on Telegram Node

* fixed send media (photo, document, video etc.) issues on Telegram Node

* file name is optional now

* ⚡ lock file and linter fix

* ⚡ improvements

* ⚡ fixes

* ⚡ Improvements

* ⚡ Add placeholder to File Name

* ⚡ Add error message

* 🔥 Remove requestWithAuthentication

* ⚡ Fix typo

* 👕 Fix linting issues

Co-authored-by: Michael Kret <[email protected]>
Co-authored-by: ricardo <[email protected]>
  • Loading branch information
3 people authored Jul 10, 2022
1 parent dbfb8d5 commit af45a07
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 41 deletions.
8 changes: 8 additions & 0 deletions packages/nodes-base/credentials/TelegramApi.credentials.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import {
ICredentialTestRequest,
ICredentialType,
INodeProperties,
} from 'n8n-workflow';
Expand All @@ -17,4 +18,11 @@ export class TelegramApi implements ICredentialType {
description: 'Chat with the <a href="https://telegram.me/botfather">bot father</a> to obtain the access token',
},
];
test: ICredentialTestRequest = {
request: {
baseURL: `=https://api.telegram.org/bot{{$credentials?.accessToken}}`,
url: '/getMe',
method: 'GET',
},
};
}
79 changes: 38 additions & 41 deletions packages/nodes-base/nodes/Telegram/Telegram.node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,7 @@ import {

import {
IBinaryData,
ICredentialsDecrypted,
ICredentialTestFunctions,
IDataObject,
INodeCredentialTestResult,
INodeExecutionData,
INodeType,
INodeTypeDescription,
Expand All @@ -20,7 +17,6 @@ import {
getPropertyName,
} from './GenericFunctions';


export class Telegram implements INodeType {
description: INodeTypeDescription = {
displayName: 'Telegram',
Expand All @@ -39,7 +35,6 @@ export class Telegram implements INodeType {
{
name: 'telegramApi',
required: true,
testedBy: 'telegramBotTest',
},
],
properties: [
Expand Down Expand Up @@ -801,7 +796,6 @@ export class Telegram implements INodeType {
placeholder: '',
description: 'Name of the binary property that contains the data to upload',
},

{
displayName: 'Message ID',
name: 'messageId',
Expand Down Expand Up @@ -1151,6 +1145,7 @@ export class Telegram implements INodeType {
default: 'HTML',
description: 'How to parse the text',
},

],
},
],
Expand Down Expand Up @@ -1686,6 +1681,31 @@ export class Telegram implements INodeType {
default: 0,
description: 'Duration of clip in seconds',
},
{
displayName: 'File Name',
name: 'fileName',
type: 'string',
default: '',
displayOptions: {
show: {
'/operation': [
'sendAnimation',
'sendAudio',
'sendDocument',
'sendPhoto',
'sendVideo',
'sendSticker',
],
'/resource': [
'message',
],
'/binaryData': [
true,
],
},
},
placeholder: 'image.jpeg',
},
{
displayName: 'Height',
name: 'height',
Expand Down Expand Up @@ -1819,39 +1839,6 @@ export class Telegram implements INodeType {
],
};

methods = {
credentialTest: {
async telegramBotTest(this: ICredentialTestFunctions, credential: ICredentialsDecrypted): Promise<INodeCredentialTestResult> {
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.',
};
}
} catch (err) {
return {
status: 'Error',
message: `Token is not valid; ${err.message}`,
};
}

return {
status: 'OK',
message: 'Authentication successful!',
};

},
},
};


async execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {
const items = this.getInputData();
const returnData: INodeExecutionData[] = [];
Expand Down Expand Up @@ -2186,6 +2173,16 @@ export class Telegram implements INodeType {
const binaryData = items[i].binary![binaryPropertyName] as IBinaryData;
const dataBuffer = await this.helpers.getBinaryDataBuffer(i, binaryPropertyName);
const propertyName = getPropertyName(operation);
const fileName = this.getNodeParameter('additionalFields.fileName', 0, '') as string;

const filename = fileName || binaryData.fileName?.toString();

if (!fileName && !binaryData.fileName) {
throw new NodeOperationError(this.getNode(),
`File name is needed to ${operation}. Make sure the property that holds the binary data
has the file name property set or set it manually in the node using the File Name parameter under
Additional Fields.`);
}

body.disable_notification = body.disable_notification?.toString() || 'false';

Expand All @@ -2194,11 +2191,12 @@ export class Telegram implements INodeType {
[propertyName]: {
value: dataBuffer,
options: {
filename: binaryData.fileName,
filename,
contentType: binaryData.mimeType,
},
},
};

responseData = await apiRequest.call(this, requestMethod, endpoint, {}, qs, { formData });
} else {
responseData = await apiRequest.call(this, requestMethod, endpoint, body, qs);
Expand Down Expand Up @@ -2233,7 +2231,6 @@ export class Telegram implements INodeType {
// chat: responseData.result[0].message.chat,
// };
// }

returnData.push({ json: responseData });
} catch (error) {
if (this.continueOnFail()) {
Expand Down

0 comments on commit af45a07

Please sign in to comment.