Skip to main content

concinno-skills-mobile-ext

Extended enterprise-messaging agent skills for Concinno. Complements the sibling concinno-skills-mobile (Twilio SMS / Voice / WhatsApp) by adding three channels Twilio does not natively cover: Microsoft Teams, WhatsApp Business Cloud API (direct Meta, no Twilio), and WeCom (企业微信).

All three tools are thin httpx REST wrappers — zero new runtime dependencies beyond Concinno itself.

Status

MVP (0.1.0) — three one-shot tools:

Tool class Platform Transport Licence
TeamsSend MS Teams Microsoft Graph v1.0 Apache-2.0
WhatsAppOfficial WhatsApp (Meta) Graph v21.0 Cloud API Apache-2.0
WeComSend WeCom / 企业微信 qyapi.weixin.qq.com Apache-2.0

Install

pip install concinno-skills-mobile-ext

Credentials

Each platform's credentials live under well-known keys in the Concinno CredentialStore, which reads (in order):

  1. Process runtime overrides via CredentialStore.set(...).
  2. Env var CONCINNO_CRED_<UPPER_KEY>.
  3. ~/.concinno/credentials.json.

Microsoft Teams

Key Env var
teams_access_token CONCINNO_CRED_TEAMS_ACCESS_TOKEN

Bring your own Azure AD OAuth Bearer token (e.g. produced via msal or a manual consent flow). This package never opens a browser.

WhatsApp Business Cloud API (Meta)

Key Env var
whatsapp_access_token CONCINNO_CRED_WHATSAPP_ACCESS_TOKEN
whatsapp_phone_number_id CONCINNO_CRED_WHATSAPP_PHONE_NUMBER_ID

Both values come from the Meta Business Suite / App dashboard.

WeCom (企业微信)

Two supported shapes — group-bot webhook (simplest) is tried first:

Key Env var
wecom_webhook_url CONCINNO_CRED_WECOM_WEBHOOK_URL

…or app-mode credentials:

Key Env var
wecom_corp_id CONCINNO_CRED_WECOM_CORP_ID
wecom_corp_secret CONCINNO_CRED_WECOM_CORP_SECRET
wecom_agent_id CONCINNO_CRED_WECOM_AGENT_ID

Example ~/.concinno/credentials.json:

{
  "teams_access_token": "eyJ0eXAiOi…",
  "whatsapp_access_token": "EAAB…",
  "whatsapp_phone_number_id": "1234567890",
  "wecom_webhook_url": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=abcd-1234"
}

If a required token is missing the tool returns {"error": "no <service> credentials — set via CredentialStore / env"} rather than crashing.

Usage via Concinno ToolRegistry

When the consumer sets CONCINNO_LOAD_PLUGINS=1, the default registry auto-mounts every tool:

import os
os.environ["CONCINNO_LOAD_PLUGINS"] = "1"

from concinno.tools.registry import get_default_registry

reg = get_default_registry()
assert {"TeamsSend", "WhatsAppOfficial", "WeComSend"} <= set(
    reg.list_deferred()
)

teams = reg.get("TeamsSend")
teams.call(
    action="send",
    chat_id="19:2da4c29f6d7041eca70b638b43d45437@thread.v2",
    content="Deploy succeeded",
    content_type="text",
)

Direct Python usage

from concinno_skills_mobile_ext import (
    TeamsSend,
    WhatsAppOfficial,
    WeComSend,
)

TeamsSend().call(
    action="send",
    chat_id="19:abc@thread.v2",
    content="<b>Deploy</b> succeeded",
    content_type="html",
)

WhatsAppOfficial().call(
    action="send",
    to="+15551234567",
    body="Your verification code is 123456",
)

WeComSend().call(
    action="send_webhook",
    content="CI pipeline green on main",
    mentioned_list=["@all"],
)

WeComSend().call(
    action="send_app",
    content="Private alert",
    user_ids=["alice", "bob"],
)

All tools return {"ok": True, ...} or a structured payload on success, or {"error": "..."} on failure — same shape as the other Concinno built-in tools. No exceptions escape the call() surface.

Concurrency

All three tools set is_concurrency_safe = False:

  • Teams — per-app/user Graph throttling and conversational ordering.
  • WhatsApp — per-phone-number Meta rate limits + 24-hour conversation window semantics.
  • WeCom — shared access-token cache in app mode; per-bot rate limits in webhook mode.

The Concinno scheduler honours this automatically.

Safety caps

  • Teams content ≤ 28 000 chars (text or HTML).
  • WhatsApp body ≤ 4 096 chars (Meta text message cap).
  • WeCom content ≤ 2 048 bytes UTF-8 (WeCom cap; CJK text is counted at 3 bytes/char).

API pins

  • Microsoft Graph: v1.0 (POST /chats/{id}/messages).
  • Meta WhatsApp Cloud API: v21.0 (POST /{ver}/{phone_number_id}/messages).
  • WeCom:
    • App — POST /cgi-bin/message/send?access_token=… (access token obtained via GET /cgi-bin/gettoken, cached 7200 s with a 60 s refresh slack).
    • Webhook — POST /cgi-bin/webhook/send?key=….

Any version bump must call out the full regression-test matrix in RELEASE_COORDINATION.md.

License

Apache-2.0. See LICENSE in the Concinno monorepo.

Metadata

Release files for concinno-skills-mobile-ext 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for concinno-skills-mobile-ext 0.1.0
File Size Uploaded
concinno_skills_mobile_ext-0.1.0.tar.gz 43.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for concinno-skills-mobile-ext 0.1.0
File Interpreter ABI Platform
concinno_skills_mobile_ext-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 60.5 kB

Release files / concinno_skills_mobile_ext-0.1.0.tar.gz

Download URL concinno_skills_mobile_ext-0.1.0.tar.gz
Size 43.1 kB
Tags Source
SHA-256 checksum
How to use checksums
85e7f2606567bd1e77e1fa54ca485a2fea2d36fd2f9a54013196c4e5070cbf89
BLAKE2b-256 checksum
How to use checksums
f6f0a7714034611dc8868af1d12b20dbf0486a5ecb55be1b3d67414f744ee3f8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.9

Release files / concinno_skills_mobile_ext-0.1.0-py3-none-any.whl

Download URL concinno_skills_mobile_ext-0.1.0-py3-none-any.whl
Size 17.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
342e9da73c54d13beefa7e9c53900f449ae92209459542481d1157eb6d0c2399
BLAKE2b-256 checksum
How to use checksums
f6c7527cbb792fab5b61a5c3b66e7feab80f746218f4f7913bf2cccce1da5d03
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.9

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page