Creator bots (Manychat and similar comment-to-DM flows) send DM cards with tappable buttons. Instagram iOS renders those buttons. GraphQL usually returns placeholder, so the bridge emits the unsupported-message stub. Instagram web does the same, so this is not a Matrix client bug.
I fetched the same thread with GET /api/v1/direct_v2/threads/{thread_id}/ on www.instagram.com, using the existing useragent.AndroidUserAgent and X-IG-App-ID: 567067343352427. That returns item_type=generic_xma and a cta_buttons array. Two shapes:
-
cta_type=xma_web_url plus action_url. These can be HTML links. GraphQL already parses cta_buttons on XMA; if action_url is set, wrapXMACaption can emit an <a>. That change is small and I can send it as its own PR.
-
cta_type=postback, empty action_url, payload of the form 1:GT-PB:ACT::<hex>. Typing the button title as a normal DM does not run the bot. Manychat waits for Instagram's messaging_postbacks webhook.
An iOS tap later shows up in Direct as text plus send_attribution=business_generic_template. After the fact, that stored item looks a lot like IGDirectTextSendMutation with the same attribution. Manychat still ignores the GraphQL send. The webhook cares about the write path, not the fields sitting on the item afterwards.
POST /api/v1/direct_v2/threads/broadcast/text/ with web cookies redirected to /accounts/login/ and cleared sessionid. GET with the Android UA did not. I would not call that POST from a cookie login.
The send that did fire messaging_postbacks went over the existing mqttbypass socket, topic /ig_send_message (same path typing uses):
{
"action": "send_item",
"item_type": "text",
"text": "<button title>",
"send_attribution": "business_generic_template",
"cta_type": "postback",
"postback_payload": "1:GT-PB:ACT::<hex>"
}
plus thread_id / client_context as usual.
I have a local patch that GETs the thread (Android UA) to recover the buttons, then sends taps over MQTT. It is a workaround: Android UA on a web session, and an undocumented MQTT payload. I would understand if that stayed out of tree. Native button chips in the Matrix client are a client problem either way.
If you want the GET+MQTT patch I can open a PR. If not, this issue is the writeup.
Creator bots (Manychat and similar comment-to-DM flows) send DM cards with tappable buttons. Instagram iOS renders those buttons. GraphQL usually returns
placeholder, so the bridge emits the unsupported-message stub. Instagram web does the same, so this is not a Matrix client bug.I fetched the same thread with GET
/api/v1/direct_v2/threads/{thread_id}/onwww.instagram.com, using the existinguseragent.AndroidUserAgentandX-IG-App-ID: 567067343352427. That returnsitem_type=generic_xmaand acta_buttonsarray. Two shapes:cta_type=xma_web_urlplusaction_url. These can be HTML links. GraphQL already parsescta_buttonson XMA; ifaction_urlis set,wrapXMACaptioncan emit an<a>. That change is small and I can send it as its own PR.cta_type=postback, emptyaction_url, payload of the form1:GT-PB:ACT::<hex>. Typing the button title as a normal DM does not run the bot. Manychat waits for Instagram'smessaging_postbackswebhook.An iOS tap later shows up in Direct as text plus
send_attribution=business_generic_template. After the fact, that stored item looks a lot likeIGDirectTextSendMutationwith the same attribution. Manychat still ignores the GraphQL send. The webhook cares about the write path, not the fields sitting on the item afterwards.POST
/api/v1/direct_v2/threads/broadcast/text/with web cookies redirected to/accounts/login/and clearedsessionid. GET with the Android UA did not. I would not call that POST from a cookie login.The send that did fire
messaging_postbackswent over the existing mqttbypass socket, topic/ig_send_message(same path typing uses):{ "action": "send_item", "item_type": "text", "text": "<button title>", "send_attribution": "business_generic_template", "cta_type": "postback", "postback_payload": "1:GT-PB:ACT::<hex>" }plus
thread_id/client_contextas usual.I have a local patch that GETs the thread (Android UA) to recover the buttons, then sends taps over MQTT. It is a workaround: Android UA on a web session, and an undocumented MQTT payload. I would understand if that stayed out of tree. Native button chips in the Matrix client are a client problem either way.
If you want the GET+MQTT patch I can open a PR. If not, this issue is the writeup.