@messagebird/n8n-nodes-bird 0.9.2 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -41,7 +41,7 @@ The **Bird** node covers the public Bird API: email and SMS sends, delivery stat
|
|
|
41
41
|
- **SMS Template** (2) — Get, List
|
|
42
42
|
- **Suppression** (4) — Add, Get, List, Remove
|
|
43
43
|
- **Verify** (3) — Create Next Channel Attempt, Create Verification, Create Verification Check
|
|
44
|
-
- **Voice** (2) — Get, List
|
|
44
|
+
- **Voice** (2) — Get Leg, List Legs
|
|
45
45
|
- **Webhook** (9) — Attempts, Create, Delete, Get, List, Replay, Rotate Secret, Test, Update
|
|
46
46
|
- **WhatsApp** (4) — Get, List, List Events, Send
|
|
47
47
|
- **Workspace** (1) — Get
|
|
@@ -22,7 +22,7 @@ exports.birdPickers = {
|
|
|
22
22
|
smsSuppressionsList: { route: "sms_suppressions:list", fields: ["destination"], search: "", pathFrom: [] },
|
|
23
23
|
suppressionList: { route: "suppression:list", fields: ["email"], search: "email", pathFrom: [] },
|
|
24
24
|
emailThreadsList: { route: "email:threads_list", fields: ["subject"], search: "subject", pathFrom: [] },
|
|
25
|
-
|
|
25
|
+
voiceLegsList: { route: "voice:legs_list", fields: ["to"], search: "", pathFrom: [] },
|
|
26
26
|
webhooksList: { route: "webhooks:list", fields: ["url"], search: "", pathFrom: [] },
|
|
27
27
|
whatsappList: { route: "whatsapp:list", fields: ["to.phone_number", "to.bsuid", "created_at"], search: "", pathFrom: [] },
|
|
28
28
|
};
|
|
@@ -194,10 +194,10 @@ exports.birdProperties = [
|
|
|
194
194
|
noDataExpression: true,
|
|
195
195
|
displayOptions: { show: { resource: ["voice"] } },
|
|
196
196
|
options: [
|
|
197
|
-
{ name: "List", value: "
|
|
198
|
-
{ name: "Get", value: "
|
|
197
|
+
{ name: "List Legs", value: "legs_list", action: "List legs" },
|
|
198
|
+
{ name: "Get Leg", value: "legs_get", action: "Get a leg", description: "Get a leg" },
|
|
199
199
|
],
|
|
200
|
-
default: "
|
|
200
|
+
default: "legs_list",
|
|
201
201
|
},
|
|
202
202
|
{
|
|
203
203
|
displayName: "Operation",
|
|
@@ -4326,7 +4326,7 @@ exports.birdProperties = [
|
|
|
4326
4326
|
required: true,
|
|
4327
4327
|
displayOptions: { show: { resource: ["whatsapp"], operation: ["send"] } },
|
|
4328
4328
|
default: "",
|
|
4329
|
-
description: "The message recipient: a phone number in E.164 format (for example `+31612345678`),
|
|
4329
|
+
description: "The message recipient: a phone number in E.164 format (for example `+31612345678`), the recipient's business-scoped user ID (for example `US.13491208655302741918`), which addresses a WhatsApp user whose phone number you do not have, or a WhatsApp group ID (for example `wag_01krdgeqcxet5s7t44vh8rt9mg`), which sends to every participant of that group. A value that is none of these returns a `422` `WhatsAppInvalidRecipient`. One-time-passcode templates require a phone number and return a `422` `WhatsAppRecipientNotSupportedForTemplate` when sent to a business-scoped user ID. A group ID naming no group this workspace holds returns a `404` `WhatsAppGroupNotFound`, and one whose group is not active returns a `409` `WhatsAppGroupNotActive`. Content a group cannot take is refused ahead of both, so a group ID paired with interactive content returns the `422` below whether or not the group exists.",
|
|
4330
4330
|
},
|
|
4331
4331
|
{
|
|
4332
4332
|
displayName: "Additional Fields",
|
|
@@ -4403,7 +4403,7 @@ exports.birdProperties = [
|
|
|
4403
4403
|
name: "from",
|
|
4404
4404
|
type: "string",
|
|
4405
4405
|
default: "",
|
|
4406
|
-
description: "The business phone number to send from, in E.164 format. Omit it for a Bird-managed template, which selects its own number from its category: setting it there returns a `422` `WhatsAppSenderNotAllowed`. Every other send, whether free-form content of any kind or a template your workspace authored, requires it, and the number must be one this workspace owns. Omitting it returns a `422` `WhatsAppSenderRequired`, and naming a number this workspace cannot send from returns a `422` `WhatsAppSenderNotFound`. Naming a number this workspace owns but that sits on a different WhatsApp Business Account than an authored template returns a `422` `WhatsAppSenderWABAMismatch`. A number this workspace holds but has not finished connecting returns a `422` `WhatsAppSenderNotConnected`.",
|
|
4406
|
+
description: "The business phone number to send from, in E.164 format. Omit it for a Bird-managed template, which selects its own number from its category: setting it there returns a `422` `WhatsAppSenderNotAllowed`. Every other send, whether free-form content of any kind or a template your workspace authored, requires it, and the number must be one this workspace owns. Omitting it returns a `422` `WhatsAppSenderRequired`, and naming a number this workspace cannot send from returns a `422` `WhatsAppSenderNotFound`. Naming a number this workspace owns but that sits on a different WhatsApp Business Account than an authored template returns a `422` `WhatsAppSenderWABAMismatch`. A number this workspace holds but has not finished connecting returns a `422` `WhatsAppSenderNotConnected`. Omit it for a group send too: the group sends on its own number, so naming one returns a `422` `WhatsAppSenderNotAllowed`.",
|
|
4407
4407
|
},
|
|
4408
4408
|
{
|
|
4409
4409
|
displayName: "Image",
|
|
@@ -4442,7 +4442,7 @@ exports.birdProperties = [
|
|
|
4442
4442
|
type: "collection",
|
|
4443
4443
|
placeholder: "Add Field",
|
|
4444
4444
|
default: {},
|
|
4445
|
-
description: "Free-form interactive content to send instead of a template: body text plus reply buttons, a menu, a link button, media cards, or a single button asking the recipient to share their location or their phone number. Deliverable only inside an open 24-hour customer service window, which the contact opens by messaging or calling you and resets each time they do it again. A send into a closed window is refused with a `422` `WhatsAppServiceWindowClosed` before anything is created or charged; one whose window closes between accept and dispatch fails asynchronously, with `service_window_expired` on the message's `last_error`.",
|
|
4445
|
+
description: "Free-form interactive content to send instead of a template: body text plus reply buttons, a menu, a link button, media cards, or a single button asking the recipient to share their location or their phone number. Deliverable only inside an open 24-hour customer service window, which the contact opens by messaging or calling you and resets each time they do it again. A send into a closed window is refused with a `422` `WhatsAppServiceWindowClosed` before anything is created or charged; one whose window closes between accept and dispatch fails asynchronously, with `service_window_expired` on the message's `last_error`. WhatsApp does not deliver interactive content to a group, so a group recipient returns a `422` `WhatsAppGroupContentNotSupported`.",
|
|
4446
4446
|
options: [
|
|
4447
4447
|
{
|
|
4448
4448
|
displayName: "Body Text",
|
|
@@ -4632,7 +4632,7 @@ exports.birdProperties = [
|
|
|
4632
4632
|
type: "collection",
|
|
4633
4633
|
placeholder: "Add Field",
|
|
4634
4634
|
default: {},
|
|
4635
|
-
description: "The template to send. A Bird-managed template selects the sender number from the template's category, so `from` must be omitted. A template is the only content deliverable outside a customer service window.",
|
|
4635
|
+
description: "The template to send. A Bird-managed template selects the sender number from the template's category, so `from` must be omitted. A template is the only content deliverable outside a customer service window. A group send takes a template your workspace authored in any category but authentication: WhatsApp does not deliver an authentication template to a group, which returns a `422` `WhatsAppGroupContentNotSupported`. A Bird-managed template sends from a Bird-owned number that no group is scoped to, so addressing one to a group returns a `422` `WhatsAppInvalidRecipient`.",
|
|
4636
4636
|
options: [
|
|
4637
4637
|
{
|
|
4638
4638
|
displayName: "ID",
|
|
@@ -4815,6 +4815,13 @@ exports.birdProperties = [
|
|
|
4815
4815
|
default: "",
|
|
4816
4816
|
description: "Filter by sender, exact match. The sender is your business number on an outbound message and the contact on an inbound one, matching the `from` each message returns. Accepts an E.164 phone number, or a business-scoped user ID to name the contact. Only a contact is ever identified by a business-scoped user ID, so `from=<business-scoped user ID>` matches inbound messages only.",
|
|
4817
4817
|
},
|
|
4818
|
+
{
|
|
4819
|
+
displayName: "Group ID",
|
|
4820
|
+
name: "group_id",
|
|
4821
|
+
type: "string",
|
|
4822
|
+
default: "",
|
|
4823
|
+
description: "Filter by the WhatsApp group the message belongs to, in either direction: the group an outbound message was addressed to, or the group an inbound message arrived through. Matches the `group_id` on each message's `to`. It names one group, so there is no way to ask for the messages that belong to no group: omit it to list group and one-to-one messages together.",
|
|
4824
|
+
},
|
|
4818
4825
|
{
|
|
4819
4826
|
displayName: "Phone Number",
|
|
4820
4827
|
name: "phone_number",
|
|
@@ -4909,7 +4916,7 @@ exports.birdProperties = [
|
|
|
4909
4916
|
displayName: "Return All",
|
|
4910
4917
|
name: "returnAll",
|
|
4911
4918
|
type: "boolean",
|
|
4912
|
-
displayOptions: { show: { resource: ["voice"], operation: ["
|
|
4919
|
+
displayOptions: { show: { resource: ["voice"], operation: ["legs_list"] } },
|
|
4913
4920
|
default: false,
|
|
4914
4921
|
description: "Whether to return all results or only up to a given limit",
|
|
4915
4922
|
},
|
|
@@ -4918,7 +4925,7 @@ exports.birdProperties = [
|
|
|
4918
4925
|
name: "limit",
|
|
4919
4926
|
type: "number",
|
|
4920
4927
|
typeOptions: { minValue: 1 },
|
|
4921
|
-
displayOptions: { show: { resource: ["voice"], operation: ["
|
|
4928
|
+
displayOptions: { show: { resource: ["voice"], operation: ["legs_list"] } },
|
|
4922
4929
|
default: 50,
|
|
4923
4930
|
description: "Max number of results to return",
|
|
4924
4931
|
},
|
|
@@ -4928,8 +4935,15 @@ exports.birdProperties = [
|
|
|
4928
4935
|
type: "collection",
|
|
4929
4936
|
placeholder: "Add Field",
|
|
4930
4937
|
default: {},
|
|
4931
|
-
displayOptions: { show: { resource: ["voice"], operation: ["
|
|
4938
|
+
displayOptions: { show: { resource: ["voice"], operation: ["legs_list"] } },
|
|
4932
4939
|
options: [
|
|
4940
|
+
{
|
|
4941
|
+
displayName: "Call ID",
|
|
4942
|
+
name: "call_id",
|
|
4943
|
+
type: "string",
|
|
4944
|
+
default: "",
|
|
4945
|
+
description: "Return only legs belonging to this call, which is how the legs of one multi-party or transferred call are correlated",
|
|
4946
|
+
},
|
|
4933
4947
|
{
|
|
4934
4948
|
displayName: "Direction",
|
|
4935
4949
|
name: "direction",
|
|
@@ -4940,49 +4954,42 @@ exports.birdProperties = [
|
|
|
4940
4954
|
{ name: "Outbound", value: "outbound" },
|
|
4941
4955
|
],
|
|
4942
4956
|
default: "",
|
|
4943
|
-
description: "Return only
|
|
4957
|
+
description: "Return only legs in this direction",
|
|
4944
4958
|
},
|
|
4945
4959
|
{
|
|
4946
4960
|
displayName: "From",
|
|
4947
4961
|
name: "from",
|
|
4948
4962
|
type: "string",
|
|
4949
4963
|
default: "",
|
|
4950
|
-
description: "Return only
|
|
4964
|
+
description: "Return only legs placed from this calling party number, matched as a whole number rather than as a fragment. Give it in international form: `+14155551234`, `14155551234`, and `0014155551234` all select the same legs. A number given without a country code is read as an international one, so give the country code to be sure of what you are matching. Use `number` instead to match part of a number, or either side of the leg.",
|
|
4951
4965
|
},
|
|
4952
4966
|
{
|
|
4953
4967
|
displayName: "Number",
|
|
4954
4968
|
name: "number",
|
|
4955
4969
|
type: "string",
|
|
4956
4970
|
default: "",
|
|
4957
|
-
description: "Return only
|
|
4958
|
-
},
|
|
4959
|
-
{
|
|
4960
|
-
displayName: "Session ID",
|
|
4961
|
-
name: "session_id",
|
|
4962
|
-
type: "string",
|
|
4963
|
-
default: "",
|
|
4964
|
-
description: "Return only calls belonging to this session, which is how the legs of one multi-party or transferred call are correlated",
|
|
4971
|
+
description: "Return only legs where the calling or called number contains this value. Matches a partial number, so a country or area-code prefix returns every leg to or from it. Combines with `from`/`to`, which match one side exactly.",
|
|
4965
4972
|
},
|
|
4966
4973
|
{
|
|
4967
4974
|
displayName: "Sip Trunk ID",
|
|
4968
4975
|
name: "sip_trunk_id",
|
|
4969
4976
|
type: "string",
|
|
4970
4977
|
default: "",
|
|
4971
|
-
description: "Return only
|
|
4978
|
+
description: "Return only legs carried by this SIP trunk",
|
|
4972
4979
|
},
|
|
4973
4980
|
{
|
|
4974
4981
|
displayName: "Started After",
|
|
4975
4982
|
name: "started_after",
|
|
4976
4983
|
type: "dateTime",
|
|
4977
4984
|
default: "",
|
|
4978
|
-
description: "Return only
|
|
4985
|
+
description: "Return only legs that started at or after this instant, inclusive. RFC 3339 timestamp.",
|
|
4979
4986
|
},
|
|
4980
4987
|
{
|
|
4981
4988
|
displayName: "Started Before",
|
|
4982
4989
|
name: "started_before",
|
|
4983
4990
|
type: "dateTime",
|
|
4984
4991
|
default: "",
|
|
4985
|
-
description: "Return only
|
|
4992
|
+
description: "Return only legs that started at or before this instant, inclusive. RFC 3339 timestamp.",
|
|
4986
4993
|
},
|
|
4987
4994
|
{
|
|
4988
4995
|
displayName: "Status",
|
|
@@ -5000,7 +5007,7 @@ exports.birdProperties = [
|
|
|
5000
5007
|
{ name: "Unknown", value: "unknown" },
|
|
5001
5008
|
],
|
|
5002
5009
|
default: [],
|
|
5003
|
-
description: "Return only
|
|
5010
|
+
description: "Return only legs with one of these statuses, comma-separated. In-flight and final statuses may be combined freely.",
|
|
5004
5011
|
},
|
|
5005
5012
|
{
|
|
5006
5013
|
displayName: "Tag",
|
|
@@ -5014,24 +5021,24 @@ exports.birdProperties = [
|
|
|
5014
5021
|
name: "to",
|
|
5015
5022
|
type: "string",
|
|
5016
5023
|
default: "",
|
|
5017
|
-
description: "Return only
|
|
5024
|
+
description: "Return only legs placed to this called party number, matched as a whole number rather than as a fragment. Give it in international form: `+16505559876`, `16505559876`, and `0016505559876` all select the same legs. A number given without a country code is read as an international one, so give the country code to be sure of what you are matching. Use `number` instead to match part of a number, or either side of the leg.",
|
|
5018
5025
|
},
|
|
5019
5026
|
],
|
|
5020
5027
|
},
|
|
5021
5028
|
{
|
|
5022
|
-
displayName: "
|
|
5023
|
-
name: "
|
|
5029
|
+
displayName: "Leg",
|
|
5030
|
+
name: "leg_id",
|
|
5024
5031
|
type: "resourceLocator",
|
|
5025
5032
|
required: true,
|
|
5026
5033
|
default: { mode: "list", value: "" },
|
|
5027
|
-
displayOptions: { show: { resource: ["voice"], operation: ["
|
|
5034
|
+
displayOptions: { show: { resource: ["voice"], operation: ["legs_get"] } },
|
|
5028
5035
|
modes: [
|
|
5029
5036
|
{
|
|
5030
5037
|
displayName: "From List",
|
|
5031
5038
|
name: "list",
|
|
5032
5039
|
type: "list",
|
|
5033
|
-
placeholder: "Select a
|
|
5034
|
-
typeOptions: { searchListMethod: "
|
|
5040
|
+
placeholder: "Select a Leg...",
|
|
5041
|
+
typeOptions: { searchListMethod: "voiceLegsList", searchable: true },
|
|
5035
5042
|
},
|
|
5036
5043
|
{
|
|
5037
5044
|
displayName: "By ID",
|
|
@@ -58,10 +58,10 @@ exports.birdRoutes = {
|
|
|
58
58
|
"sms_keyword_rules:delete": { method: "DELETE", path: "/v1/sms/keyword-rules/{id}", pathParams: ["id"], topLevel: ["id"], collections: ["additionalFields"], query: [], body: [], jsonFields: [], structured: {}, renames: {}, arrayFields: [], dateTimeFields: [], nullableFields: [], binaryFields: [], rawBodyField: "", paginated: false, collection: false, idempotencyHeader: true, scopes: ["sms_management"] },
|
|
59
59
|
"whatsapp:send": { method: "POST", path: "/v1/whatsapp/messages", pathParams: [], topLevel: ["to"], collections: ["additionalFields"], query: [], body: ["to", "from", "template", "text", "image", "video", "audio", "sticker", "document", "location", "interactive", "contact_cards", "in_reply_to_message_id", "tags", "metadata"], jsonFields: ["template.components", "interactive.header", "interactive.buttons", "interactive.list", "interactive.cta_url", "interactive.cards", "contact_cards"], structured: { "template": "struct", "text": "struct", "image": "struct", "video": "struct", "audio": "struct", "sticker": "struct", "document": "struct", "location": "struct", "interactive": "struct", "tags": "list", "metadata": "map" }, renames: {}, arrayFields: [], dateTimeFields: [], nullableFields: [], binaryFields: [], rawBodyField: "", paginated: false, collection: false, idempotencyHeader: true, scopes: ["whatsapp"] },
|
|
60
60
|
"whatsapp:get": { method: "GET", path: "/v1/whatsapp/messages/{message_id}", pathParams: ["message_id"], topLevel: ["message_id"], collections: ["additionalFields"], query: [], body: [], jsonFields: [], structured: {}, renames: {}, arrayFields: [], dateTimeFields: [], nullableFields: [], binaryFields: [], rawBodyField: "", paginated: false, collection: false, idempotencyHeader: false, scopes: ["whatsapp"] },
|
|
61
|
-
"whatsapp:list": { method: "GET", path: "/v1/whatsapp/messages", pathParams: [], topLevel: [], collections: ["additionalFields"], query: ["limit", "starting_after", "ending_before", "created_after", "created_before", "status", "direction", "to", "from", "phone_number", "bsuid", "category", "tag"], body: [], jsonFields: [], structured: {}, renames: {}, arrayFields: ["status", "tag"], dateTimeFields: ["created_after", "created_before"], nullableFields: [], binaryFields: [], rawBodyField: "", paginated: true, collection: true, idempotencyHeader: false, scopes: ["whatsapp"] },
|
|
61
|
+
"whatsapp:list": { method: "GET", path: "/v1/whatsapp/messages", pathParams: [], topLevel: [], collections: ["additionalFields"], query: ["limit", "starting_after", "ending_before", "created_after", "created_before", "status", "direction", "to", "from", "phone_number", "bsuid", "category", "group_id", "tag"], body: [], jsonFields: [], structured: {}, renames: {}, arrayFields: ["status", "tag"], dateTimeFields: ["created_after", "created_before"], nullableFields: [], binaryFields: [], rawBodyField: "", paginated: true, collection: true, idempotencyHeader: false, scopes: ["whatsapp"] },
|
|
62
62
|
"whatsapp:list_events": { method: "GET", path: "/v1/whatsapp/messages/{message_id}/events", pathParams: ["message_id"], topLevel: ["message_id"], collections: ["additionalFields"], query: ["type"], body: [], jsonFields: [], structured: {}, renames: {}, arrayFields: [], dateTimeFields: [], nullableFields: [], binaryFields: [], rawBodyField: "", paginated: false, collection: true, idempotencyHeader: false, scopes: ["whatsapp"] },
|
|
63
|
-
"voice:
|
|
64
|
-
"voice:
|
|
63
|
+
"voice:legs_list": { method: "GET", path: "/v1/voice/legs", pathParams: [], topLevel: [], collections: ["additionalFields"], query: ["direction", "status", "call_id", "sip_trunk_id", "from", "to", "number", "tag", "started_after", "started_before", "limit", "starting_after", "ending_before"], body: [], jsonFields: [], structured: {}, renames: {}, arrayFields: ["status", "tag"], dateTimeFields: ["started_after", "started_before"], nullableFields: [], binaryFields: [], rawBodyField: "", paginated: true, collection: true, idempotencyHeader: false, scopes: ["voice"] },
|
|
64
|
+
"voice:legs_get": { method: "GET", path: "/v1/voice/legs/{leg_id}", pathParams: ["leg_id"], topLevel: ["leg_id"], collections: ["additionalFields"], query: [], body: [], jsonFields: [], structured: {}, renames: {}, arrayFields: [], dateTimeFields: [], nullableFields: [], binaryFields: [], rawBodyField: "", paginated: false, collection: false, idempotencyHeader: false, scopes: ["voice"] },
|
|
65
65
|
"verify:verifications_create": { method: "POST", path: "/v1/verify/verifications", pathParams: [], topLevel: ["to"], collections: ["additionalFields"], query: [], body: ["to", "options", "metadata"], jsonFields: [], structured: { "to": "struct", "options": "struct", "metadata": "map" }, renames: {}, arrayFields: ["options.channels"], dateTimeFields: [], nullableFields: [], binaryFields: [], rawBodyField: "", paginated: false, collection: false, idempotencyHeader: true, scopes: ["verify"] },
|
|
66
66
|
"verify:verifications_check": { method: "POST", path: "/v1/verify/verifications/check", pathParams: [], topLevel: ["to", "code"], collections: ["additionalFields"], query: [], body: ["to", "code"], jsonFields: [], structured: { "to": "struct" }, renames: {}, arrayFields: [], dateTimeFields: [], nullableFields: [], binaryFields: [], rawBodyField: "", paginated: false, collection: false, idempotencyHeader: true, scopes: ["verify"] },
|
|
67
67
|
"verify:verifications_next_channel": { method: "POST", path: "/v1/verify/verifications/next-channel", pathParams: [], topLevel: ["to"], collections: ["additionalFields"], query: [], body: ["to"], jsonFields: [], structured: { "to": "struct" }, renames: {}, arrayFields: [], dateTimeFields: [], nullableFields: [], binaryFields: [], rawBodyField: "", paginated: false, collection: false, idempotencyHeader: true, scopes: ["verify"] },
|
package/package.json
CHANGED