Une custom destination est un canal qui pointe vers une URL que vous possédez plutôt que vers un réseau social. Ocoya envoie chaque post programmé en POST vers cette URL au format JSON, et votre code décide ce que « publier » signifie — un article dans votre CMS, une ligne dans une base de données, un message dans une file.
Cette page décrit le contrat que votre endpoint doit respecter. Pour le corps de requête complet, voyez Custom (webhook) dans le centre d’aide.
Les destinations personnalisées se connectent dans l’application Ocoya — Channels → Connect channel → Custom. Il n’existe aucun endpoint REST ou MCP pour en connecter une, donc cette page décrit l’endpoint que vous écrivez, pas un endpoint que vous appelez.
What Ocoya sends
Un POST avec un corps JSON et Content-Type: application/json, plus tous les en-têtes que vous avez configurés sur le canal.
{
"event": "post.published",
"post": {
"id": "clx…",
"title": "…",
"caption": "…",
"image": "https://…",
"options": { "slug": "…" }
}
}What your endpoint must reply
Trois éléments, tous obligatoires. Une publication à laquelle il en manque un est enregistrée comme ayant échoué.
1. A 2xx status
Tout autre code est enregistré comme une publication échouée, et le statut ainsi que le corps de la réponse sont affichés sur le post afin que vous puissiez voir ce que votre endpoint a répondu.
2. An id
Votre propre identifiant pour ce que vous venez de créer — un id de ligne de base de données, un id de document CMS, tout identifiant qui vous permettrait de retrouver l’enregistrement. Ocoya le stocke et le renvoie à votre URL de suppression, donc c’est par cet identifiant que vous supprimez.
3. A url
L’adresse à laquelle vous avez publié. Elle devient le lien View post du post dans Ocoya.
{
"id": "9f2c1a",
"url": "https://yourblog.com/post"
}| Field | Type | Required | What it does |
|---|---|---|---|
id | string | Yes | Votre identifiant pour le contenu créé. Renvoyé comme id lors d’une suppression. |
url | string | Yes | L’adresse publiée. Devient le lien View post du post. |
Ce sont les deux seules clés lues à partir de la réponse, et leur orthographe doit être exacte. permalink était accepté comme synonyme de url dans les versions précédentes et ne l’est plus.
Elles sont toutes deux lues uniquement à partir de cette réponse. Il n’existe aucun callback pour les envoyer ultérieurement, donc un endpoint qui met le travail en file d’attente doit connaître son id et son adresse avant de répondre plutôt qu’après la fin du traitement.
Si votre endpoint répond avec un 2xx sans ces champs, Ocoya enregistre la publication comme ayant échoué et l’indique sur le post. Le contenu peut très bien exister sur votre destination à ce moment-là — le message le signale, car republier à l’aveugle créerait un doublon.
Timing
Votre endpoint dispose de 30 secondes pour répondre. Accusez réception de la requête en premier et effectuez le travail lent ensuite, plutôt que l’inverse.
Une redirection est suivie plutôt que considérée comme un échec, tant que l’adresse ciblée passe les mêmes contrôles que l’adresse initiale. La méthode est conservée, donc votre endpoint reçoit toujours un POST avec le corps. La limite est de trois sauts.
Deleting
Si le canal possède une URL de suppression, supprimer un post dans Ocoya envoie une requête post.deleted à cette URL contenant l’id que vous avez renvoyé lors de la publication :
{
"event": "post.deleted",
"id": "9f2c1a",
"post": { … }
}id est au niveau supérieur et tout seul — l’identifiant que vous avez émis, sans rien à analyser ni d’enveloppe à traverser. L’url que vous avez renvoyée n’est pas renvoyée : un endpoint qui supprime à partir de son propre id n’a aucune utilité pour une adresse qu’il connaît déjà.
Répondez par n’importe quel statut 2xx. Si le post est déjà supprimé de votre côté, un 404 ou 410 est enregistré comme déjà supprimé plutôt que comme un échec. Le post est supprimé dans Ocoya dans tous les cas.
Related
Custom (webhook)
Le payload complet, les en-têtes, les limites et les problèmes fréquents.