# 投稿の操作

> Botdoorの投稿を承認、却下、キャンセル、削除、日時変更、再試行し、失敗した最初のコメントを再試行します。それぞれの実行権限、ボディ、エラーを解説します。

Source: https://docs.botdoor.co/ja/api/post-actions/

いずれも`{"post": {…}}`を返します（[形式](https://docs.botdoor.co/ja/api/posts-read/)）。ただし削除は`{"id": "…", "deleted": true}`を返します。

| 操作 | ボディ | 実行できる人 |
|---|---|---|
| `POST /posts/{id}/approve` | `{"publishNow"?: true, "scheduledFor"?: "…"}` | ログイン済みの人間のみ |
| `POST /posts/{id}/reject` | `{"reason"?: "…"}` | 人間、または投稿を作成したキー |
| `POST /posts/{id}/cancel` | なし | 人間、または投稿を作成したキー |
| `DELETE /posts/{id}` | なし | 人間、または投稿を作成したキー |
| `POST /posts/{id}/reschedule` | `{"scheduledFor": "…"}` | 人間、または投稿を作成したキー |
| `POST /posts/{id}/retry` | なし | 人間、または投稿を作成したキー |
| `POST /posts/{id}/first-comment/retry` | なし | キーまたは人間 |

## 承認

`needs_approval`の投稿を承認します。未来の`scheduledFor`があればその日時に予約され、なければすぐに公開されます。レスポンスはすぐにステータス`publishing`で返り、Zernioへの送信はバックグラウンドで行われます。`settled`が`true`になるまで`GET /posts/{id}`をポーリングすると、`scheduled`、`published`、`failed`のいずれかがわかります。送信を待っている間は`queuePosition`に順番が入ります。日時が過ぎている場合は、`details.choices`付きの`409 schedule_passed`が返ります。`publishNow: true`か新しい`scheduledFor`を送信してください。キーで呼び出すと`403 approval_requires_human`が返ります。また、キーが自分の投稿を承認することは決してできません（`self_approval_forbidden`）。

## 却下

承認待ちの投稿を完全に取りやめます。`reason`は作成者に表示されます。キーが却下できるのは、そのキー自身が作成した投稿だけです。別のキーが作成した投稿や、アプリで作成された投稿を却下しようとすると`403 reject_not_own_post`が返ります。ログイン済みの人間は、承認待ちのどの投稿でも却下できます。

## キャンセル

`needs_approval`または`scheduled`の間に実行できます。2回キャンセルしても問題ありません。それ以外の状態では`409 not_cancellable`が返ります。キーがキャンセルできるのは、そのキー自身が作成した投稿だけです（それ以外は`403 cancel_not_own_post`）。取り消されたキーが作成した投稿は、ログイン済みの人間がキャンセルします。人間はどの投稿でもキャンセルできます。

## 削除

一度も送信されていない投稿を完全に削除します。対象は`needs_approval`または`rejected`の投稿と、すべてのネットワークが`cancelled`または`failed`になっている`cancelled`または`failed`の投稿です。最初のコメント、未送信のメール、ほかの投稿で使われていないメディアも一緒に削除されます。Zernioにコピーが残っている場合（失敗した送信）は、そのコピーも削除されます。`published`、`partial`、`scheduled`、`publishing`の投稿は`409 not_deletable`となり、削除されません。予約済みの投稿は先にキャンセルしてください。キーが削除できるのは、そのキー自身が作成した投稿だけです（それ以外は`403 delete_not_own_post`）。ログイン済みの人間は、ワークスペース内の該当する投稿をどれでも削除できます。もう一度削除すると`404 post_not_found`が返ります。

## 日時の変更

オフセット付きのISO 8601で新しい日時を指定します。承認待ちの投稿はBotdoor内で変更され、予約済みの投稿はプロバイダー側で移動されます。それ以外の状態では`409 not_reschedulable`が返ります。キーが日時を変更できるのは、そのキー自身が作成した投稿だけです（それ以外は`403 reschedule_not_own_post`）。ログイン済みの人間は、どの投稿でも日時を変更できます。

## 失敗した投稿の再試行

`status`が`failed`の場合のみ実行できます。それ以外の場合は`409 not_retryable`が返ります。投稿はそのままの内容で、新しい試行として再送されます。`scheduledFor`が過ぎている（または未指定の）場合はすぐに公開され、未来の日時なら予約が維持されます。ログイン済みの人間は、失敗したどの投稿でも再試行できます。キーが再試行できるのは、そのキー自身が作成した投稿だけです（それ以外は`403 retry_not_own_post`）。自動で投稿するキーの場合は、再度公開されます。承認制のキーの場合は、投稿が`needs_approval`に戻り、通常どおり承認依頼のメールが届きます。

## 最初のコメントの再試行

`firstComment.status`が`failed`の場合のみ実行できます。二重に投稿されることはありません。それ以外の場合は`409 first_comment_not_failed`が返ります。

## エラー

| ステータス | コード |
|---|---|
| 403 | `approval_requires_human`、`self_approval_forbidden`、`reject_not_own_post`、`retry_not_own_post`、`cancel_not_own_post`、`delete_not_own_post`、`reschedule_not_own_post`、`session_required`、`cross_site_request` |
| 404 | `post_not_found` |
| 409 | `not_awaiting_approval`、`schedule_passed`、`not_cancellable`、`not_deletable`、`not_reschedulable`、`first_comment_not_failed`、`not_retryable` |

## よくある質問

### ボットは自分の投稿を承認できますか？

いいえ。承認にはログイン済みの人間が必要です。また、キーが自分で作成した投稿を承認することは決してできません。

### ボットは別のボットの投稿を却下できますか？

いいえ。キーが却下、再試行、キャンセル、削除、日時の変更をできるのは、そのキー自身が作成した投稿だけです（403 reject_not_own_post、retry_not_own_post、cancel_not_own_post、delete_not_own_post、reschedule_not_own_post）。ログイン済みの人間は、どの投稿でもこれらを操作できます。

### ボットは投稿をキャンセルできますか？

はい。そのキーが作成した投稿なら、承認待ちまたは予約済みの間はキャンセルできます。それ以外の投稿は、ログイン済みの人間が操作します。

### ボットは投稿を削除できますか？

そのキーが作成した投稿で、一度も送信されていないもの（承認待ち、却下済み、キャンセル済み、またはすべてのネットワークで失敗）だけ削除できます。公開済みの投稿は残ります。ネットワーク側で削除してください。

### 承認を待っている間に予約日時が過ぎてしまったら？

何も投稿されていません。publishNow: trueを付けて承認するか、新しいscheduledForを送信してください。
