mirror of
https://github.com/n8n-io/n8n.git
synced 2024-11-09 22:24:05 -08:00
fix(Telegram Node): Fix sending binaryData media (photo, document, video 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 <michael.k@radency.com> Co-authored-by: ricardo <ricardoespinoza105@gmail.com>
This commit is contained in:
parent
dbfb8d56dc
commit
af45a07f21
|
@ -1,4 +1,5 @@
|
|||
import {
|
||||
ICredentialTestRequest,
|
||||
ICredentialType,
|
||||
INodeProperties,
|
||||
} from 'n8n-workflow';
|
||||
|
@ -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',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
|
|
@ -4,10 +4,7 @@ import {
|
|||
|
||||
import {
|
||||
IBinaryData,
|
||||
ICredentialsDecrypted,
|
||||
ICredentialTestFunctions,
|
||||
IDataObject,
|
||||
INodeCredentialTestResult,
|
||||
INodeExecutionData,
|
||||
INodeType,
|
||||
INodeTypeDescription,
|
||||
|
@ -20,7 +17,6 @@ import {
|
|||
getPropertyName,
|
||||
} from './GenericFunctions';
|
||||
|
||||
|
||||
export class Telegram implements INodeType {
|
||||
description: INodeTypeDescription = {
|
||||
displayName: 'Telegram',
|
||||
|
@ -39,7 +35,6 @@ export class Telegram implements INodeType {
|
|||
{
|
||||
name: 'telegramApi',
|
||||
required: true,
|
||||
testedBy: 'telegramBotTest',
|
||||
},
|
||||
],
|
||||
properties: [
|
||||
|
@ -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',
|
||||
|
@ -1151,6 +1145,7 @@ export class Telegram implements INodeType {
|
|||
default: 'HTML',
|
||||
description: 'How to parse the text',
|
||||
},
|
||||
|
||||
],
|
||||
},
|
||||
],
|
||||
|
@ -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',
|
||||
|
@ -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[] = [];
|
||||
|
@ -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';
|
||||
|
||||
|
@ -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);
|
||||
|
@ -2233,7 +2231,6 @@ export class Telegram implements INodeType {
|
|||
// chat: responseData.result[0].message.chat,
|
||||
// };
|
||||
// }
|
||||
|
||||
returnData.push({ json: responseData });
|
||||
} catch (error) {
|
||||
if (this.continueOnFail()) {
|
||||
|
|
Loading…
Reference in a new issue