Reply to an Apple Messages conversation
Requires a configured, connected business account and an open conversation.
Queues a billable message; sent means Apple gateway acceptance. Send --text,
--rich-link or --interactive, or a stored template with --template (browse them
with "bird amb templates list"). --text may go with either of the other two. It
arrives first as its own bubble beside --interactive. Beside --rich-link, the
card replaces the first copy of its URL in it, splitting it around the card, or
follows it when the URL is absent. Later copies of that URL are dropped.
link_previews, set through --body-file, is
refused beside --rich-link or --interactive. A template send derives its
category from the template.
Build the request from flags, a JSON AMBMessageSendRequest body via --body-file ("-" reads
stdin), or both — a flag overrides the matching body field. Run --example to
print a ready-to-edit body, or --dry-run to print the resolved request without
sending it.
# print the body shape (no credentials needed)
bird amb send --example
# the body it prints:
{
"from": "b52d6267-2b62-4f8a-8842-0533d0f1dc07",
"text": {
"body": "Your order is ready."
},
"to": "opaque-customer-id"
}
# reply with text
bird amb send --from b52d6267-2b62-4f8a-8842-0533d0f1dc07 --to opaque-customer --text 'Your order is ready.'
# offer quick replies, introduced by a text bubble
bird amb send --from b52d6267-2b62-4f8a-8842-0533d0f1dc07 --to opaque-customer --text 'Your fitting is tomorrow.' --interactive '{"quick_reply":{"summary_text":"Keep the time?","items":[{"identifier":"keep","title":"Keep it"},{"identifier":"move","title":"Move it"}]}}'
# show a logo as a small rich link (layout is icon, square or large)
bird amb send --from b52d6267-2b62-4f8a-8842-0533d0f1dc07 --to opaque-customer --rich-link '{"rich_link_data":{"url":"https://example.com/store","title":"Example Store","assets":{"image":{"source_url":"https://example.com/logo.png","layout":"icon"}}}}'
# show page icons for the links in a message (link_previews.layout, set through --body-file)
echo '{"text":{"link_previews":{"layout":"icon"}}}' | bird amb send --body-file - --from b52d6267-2b62-4f8a-8842-0533d0f1dc07 --to opaque-customer --text 'Visit https://example.com/store'
# send by template with variable values
bird amb send --from b52d6267-2b62-4f8a-8842-0533d0f1dc07 --to opaque-customer --template bird_order_update --parameters '{"order_number":"1234"}'
| Name | Description |
|---|
--from | Apple Business ID of a configured business (required; or in --body-file) |
--to | Opaque customer identifier from an open conversation (required; or in --body-file) |
--text | Message text. Beside --interactive it arrives first as its own bubble. Beside --rich-link the card replaces the first copy of its URL in it, splitting it around the card, or follows it |
--subject | Subject shown above --text |
--attachments | Files sent with --text, as a JSON array of objects with source_url or attachment_id |
--rich-link | A link with a preview card, as a JSON object with rich_link_data or rich_link_construct |
--interactive | Something to tap, as a JSON object with one of quick_reply, list_picker, event, dynamic or imessage_app |
--template | Send by a stored template: its id (amt_…) or slug (instead of --text, --rich-link or --interactive) |
--language | Template language as a BCP-47 tag (e.g. fr); template sends only |
--parameters | Template variable values as a JSON object; template sends only |
--source | Sender identity permitted by the credential: api, automation, or operator |
--skip-typing | Send the first part without Bird's typing indicator and one-second pause, after "bird amb conversations typing --event typing_start" |
| Name | Description |
|---|
--category | Category label for statistics (rejected alongside --template, which derives its own category) |
--group | Department identifier |
--intent | Purpose of the conversation |
--locale | Apple locale identifier; omitted uses the conversation locale |
--metadata | Per-message context as a JSON object, up to 2 KB |
--tags | Structured labels as a JSON array of name and value objects |
| Name | Description |
|---|
--body-file | Read the JSON request body from this file; "-" reads stdin |
--example | Print a complete example request body, then exit |
--dry-run | Print the resolved request without sending it, then exit |
--idempotency-key | Deduplication key; a retry with the same key won't act twice |
| Name | Description |
|---|
--request-schema | Print the request schema index, or with --path one input's schema, then exit |
--path | Select one input by its schema path, such as interactive, for --request-schema |
--response-schema | Print the fields this command returns, then exit |