n8nでAIブログ執筆を自動化する手順|WordPressに下書き投稿するところまでやってみた

n8nとOpenAIとWordPressを連携してAIブログ下書きを自動化するイメージ IT・ツール活用
IT・ツール活用

こんにちは、さとさんです。

最近、ブログ記事を書くときに、ChatGPTに構成案や本文のたたき台を作ってもらうことが増えてきました。

ブログを書く方はご存じだと思いますが、投稿を公開するまでの作業はざっくりこんな感じです。

  • 記事メモを整理する
  • タイトルを考える
  • 本文を書く
  • メタディスクリプションを考える
  • WordPressに貼り付ける
  • スラッグを設定する
  • カテゴリーやタグを考える

自分としては記事を書いて公開だけしたいのですが、それ以外にもやることがとっても多いです。

そこで今回は、n8n という自動化ツールを使って、ブログ執筆の一部を自動化してみました。

この記事の手順を最後まで進めると、n8n上で記事メモを入力するだけで、OpenAIが本文を生成し、WordPressに下書き投稿を作成できるようになります。

なお、この記事の段階では、カテゴリー、タグ、Cocoonのメタディスクリプション、アイキャッチ画像の自動設定までは行っていません。

まずは本文を下書き投稿するところまでをゴールにしています。

  1. n8nとは
  2. 今回作るもの
  3. 今回の前提
  4. 手順1:n8n用のフォルダを作る
  5. 手順2:n8nのデータ保存用フォルダを作る
  6. 手順3:docker-compose.ymlを作る
    1. extra_hostsについて
    2. N8N_SECURE_COOKIE=falseについて
  7. 手順4:n8nを起動する
  8. 手順5:n8nコンテナからWordPressに届くか確認する
  9. 手順6:WordPressのアプリケーションパスワードを作る
    1. ここで必要な情報
  10. 手順7:n8nにWordPress認証情報を登録する
  11. 手順8:n8nにOpenAI APIキーを登録する
  12. 手順9:最初のワークフローを作る
  13. 手順10:Manual Triggerを追加する
  14. 手順11:Edit Fieldsノードで記事メモを入力する
  15. 手順12:OpenAIノードで本文を生成する
  16. 手順13:CodeノードでOpenAIの出力を整形する
  17. 手順14:WordPressノードで下書き投稿する
  18. 手順15:ワークフローを実行する
  19. 今回できたこと
  20. 完全自動公開はしない
  21. 次にやりたいこと
    1. カテゴリーとタグの自動設定
    2. メタディスクリプションの反映
    3. アイキャッチ画像の自動生成
    4. WordPressメディアライブラリへの画像アップロード
  22. 個人的に一番よさそうな運用
  23. まとめ
  24. トラブルシュート
    1. docker compose up -dでpermission deniedが出た
    2. WordPress認証情報の接続テストでタイムアウトした
    3. OpenAIノードで「You exceeded your current quota」が出た
    4. WordPressノードで「投稿を編集する権限がありません」と出た
    5. 対処方法
    6. OpenAI出力をWordPressノードで指定するとundefinedになる

n8nとは

n8nは、いろいろなサービスをつないで作業を自動化できるツールです。

たとえば、

記事テーマを入力する

OpenAIで本文を作る

WordPressに下書き投稿する

自分で確認して公開する

という流れを、画面上でポチポチして作れます。

私のようにWordPressを自分で運用している場合は、n8nを自宅サーバーで動かせるのが便利です。
ちなみに、この記事ではDockerを使って動かしています。

今回作るもの

今回作るのは、以下のような仕組みです。

n8nの手動実行

記事テーマ・メモを入力

OpenAIでブログ本文を生成

CodeノードでOpenAIの出力を整形

WordPressに下書き投稿

最終的には画像生成やアイキャッチ設定まで自動化したいですが、まずは本文投稿までを動かしてみます。

今回できたワークフローは、最終的にこのような形になりました。

When clicking ‘Execute workflow’

Edit Fields

Message a model

Code in JavaScript

Create a post
n8nでOpenAIとWordPressをつないだブログ下書き作成ワークフロー
n8nで記事メモからAI本文生成、WordPress下書き投稿までをつないだワークフローです。

今回の前提

この記事では、以下の前提で進めます。

  • WordPressはすでに運用中
  • WordPressもn8nもDockerコンテナで動かす
  • Docker Composeを使える
  • OpenAI APIキーを用意できる
  • WordPressの管理者権限がある
  • 最初はローカルまたは家庭内LANでn8nを使う

n8nをインターネットに公開する場合は、HTTPS、認証、アクセス制限をきちんと考える必要があるので、個人利用であれば家庭内LANだけで試すのがおすすめです。

手順1:n8n用のフォルダを作る

まず、サーバー上でn8n用のフォルダを作ります。

私の場合は、Docker Composeで管理したいので、以下のようなディレクトリを作ります。

mkdir -p ~/docker/n8n
cd ~/docker/n8n

手順2:n8nのデータ保存用フォルダを作る

次に、n8nの設定やワークフローを保存するためのフォルダを作ります。

mkdir -p ./n8n_data

ここで、フォルダの所有者をn8nコンテナが書き込めるように変更しておきます。

sudo chown -R 1000:1000 ./n8n_data
sudo chmod -R u+rwX ./n8n_data

手順3:docker-compose.ymlを作る

次に、docker-compose.yml を作成します。

まずはシンプルにSQLite構成で始めます。個人利用で、ブログ下書き作成程度ならこれで十分だと思います。

今回は、WordPressも同じサーバー上のDockerコンテナで動かしているため、n8nコンテナ内から wordpressのアドレス にアクセスしたときに、wordpressのコンテナの内部IPへ向くように extra_hosts も設定しておきます。

services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: unless-stopped
ports:
- "5678:5678"
environment:
- TZ=Asia/Tokyo
- GENERIC_TIMEZONE=Asia/Tokyo
- N8N_HOST=192.168.10.100
- N8N_PORT=5678
- N8N_PROTOCOL=http
- N8N_SECURE_COOKIE=false
volumes:
- ./n8n_data:/home/node/.n8n
extra_hosts:
- "wordpressのドメイン名:192.168.10.100"

wordpressのドメイン名192.168.10.100 の部分は、自分のドメイン名やサーバーのIPアドレスに置き換えます。

extra_hostsについて

今回の環境では、WordPressもn8nも同じサーバー上のDockerコンテナで動いています。

この状態でn8nからWordPressに接続する場合、PCのブラウザから https://wordpressのドメイン名 にアクセスできていても、n8nコンテナの中から同じようにアクセスできるとは限りません。

そこで、n8nコンテナ内では、

wordpressのドメイン名 → 192.168.10.100

として扱うように、extra_hosts を追加しています。

extra_hosts:
- "wordpressのドメイン名:192.168.10.100"

これにより、n8nは、外部公開時と同じく、

https://wordpressのドメイン名

で接続できるようになります。

N8N_SECURE_COOKIE=falseについて

N8N_SECURE_COOKIE=false は、HTTPでローカル運用するための設定です。

今回は家庭内LANで使用する前提なのでfalseとしています。
もし、将来的にHTTPSで公開する場合は、この設定を見直すことを忘れないようにしましょう。

手順4:n8nを起動する

以下のコマンドでn8nを起動します。

docker compose up -d

起動確認します。

docker compose ps

ログも確認しておきます。

docker compose logs -f

問題なければ、ブラウザで以下にアクセスします。

http://サーバーのIPアドレス:5678

サーバーのIPアドレス の部分は、自分のサーバーのIPアドレスに置き換えてください。

初回アクセス時に、n8nの管理者アカウントを作成します。

n8nの初回セットアップでオーナーアカウントを作成する画面
初回アクセス時に、n8nのオーナーアカウントを作成します。

手順5:n8nコンテナからWordPressに届くか確認する

n8nを起動したら、WordPressの設定に進む前に、n8nコンテナ内からWordPressに届くか確認しておきます。

docker compose exec n8n sh

n8nコンテナの中に入ったら、以下を実行します。

wget -S -O - https://wordpressのドメイン名/wp-json/ 2>&1 | head -50

こんな感じで200応答のWordPressのREST APIらしきJSONが返ってくればOKです。

Connecting to [wordpressのドメイン名] (wordpressの内部のIP:443)
  HTTP/1.1 200 OK
  Server: xxxxx
  Date: Mon, 27 Apr 2026 14:54:20 GMT
  Content-Type: application/json; charset=UTF-8
  Transfer-Encoding: chunked
  Connection: close
  ...略

ここでタイムアウトする場合は、n8nの認証情報ではなく、ネットワークや名前解決の問題です。

確認できたら、コンテナから抜けます。

exit

手順6:WordPressのアプリケーションパスワードを作る

n8nからWordPressに投稿するには、WordPress側でAPI用のパスワードを作る必要があります。

WordPressには アプリケーションパスワード という仕組みがあります。

これは、通常のログインパスワードとは別に、外部ツールやスクリプトがREST APIを使うための専用パスワードです。

WordPress管理画面で、以下の順に進みます。

ユーザー

プロフィール

アプリケーションパスワード

新しいアプリケーションパスワード名には、わかりやすく、

n8n-blog-draft

などを入れます。

WordPressのプロフィール画面でn8n用アプリケーションパスワードを作成する画面
WordPress REST API連携用に、n8n専用のアプリケーションパスワードを作成します。

生成されたパスワードは一度しか表示されないので、必ずコピーして保存します。

なお、アプリケーションパスワードは秘密情報です。スクリーンショットをブログに載せる場合は、パスワード部分が表示されないように注意します。

ここで必要な情報

n8nに登録するために、以下を控えておきます。

WordPress URL: 
  WordPressサイトのURL
ユーザー名:
  WordPressにログインする際のユーザー名
アプリケーションパスワード:
  手順6で生成したもの

手順7:n8nにWordPress認証情報を登録する

n8nの画面で、左側のメニューから認証情報を追加します。

Credentials

Add credential

WordPress API

入力する内容は以下です。

Username:
  WordPressのログインユーザー名
Password:
  アプリケーションパスワード
WordPress URL:
  WordPressのURL
n8nでWordPressのURL、ユーザー名、アプリケーションパスワードを登録し接続に成功した画面
n8nでWordPress APIの認証情報を登録します。

保存して、接続テストが通ればOKです。

補足になりますが、今回のDocker環境では、extra_hosts を入れる前はWordPressへの接続テストでタイムアウトしましたが、extra_hosts を入れたあとに接続できるようになりました。

手順8:n8nにOpenAI APIキーを登録する

次に、OpenAIの認証情報を登録します。

OpenAI APIキーは、OpenAIのDeveloper Platformで作成します。

APIキーの作成方法、料金上限、セキュリティ設定については別記事で詳しくまとめる予定です。

ここでは、すでにOpenAI APIキーを取得済みという前提で進めます。

n8nでは以下のように進みます。

Credentials

Add credential

OpenAI

OpenAI APIキーを入力して保存します。

n8nでOpenAI APIキーを登録し接続に成功した画面
n8nでOpenAI APIの認証情報を登録しました。

注意点として、ChatGPT Plusに加入していても、OpenAI APIの利用料金は別です。

n8nからOpenAIノードを使う場合は、OpenAI Platform側の課金設定や利用上限も確認しておきましょう。

OpenAI API 料金
GPT-5.4、マルチモーダルモデル、各種ツールの OpenAI API 料金を確認できます。トークンコスト、リアルタイム、画像、動画の料金に加え、サービスティアも比較できます。

補足として、本検証ではGPT-5.4-MINIを5回呼び出し、約2,000トークンを使用しました。Usage画面上では、この時点の費用は $0.00 と表示されていました。

ただし、OpenAI APIは原則として利用量に応じて料金が発生するため、実際に使う場合はUsageやLimitsを確認しながら進めるのが安心です。

OpenAI PlatformのUsage画面でGPT-5.4-MINIを5回呼び出した使用量と費用を確認している画面
n8nからOpenAIノードを使った際のAPI使用量。

手順9:最初のワークフローを作る

ここから、実際にワークフローを作ります。

最終的には、次の流れにします。

Manual Trigger

Edit Fields

OpenAI

Code

WordPress

まずは新しいWorkflowを作成します。

n8nで新しいワークフローを作成した直後の空のキャンバス
新しいワークフローを作成し、ここにノードを追加していきます。

手順10:Manual Triggerを追加する

最初に Manual Trigger を置きます。

これは、手動で実行するための開始ボタンです。

最初から自動実行にすると事故が怖いので、まずは手動実行にします。

手順11:Edit Fieldsノードで記事メモを入力する

次に、Edit Fields ノードを追加します。

ここで、記事の材料になる情報を入れます。

今回の例では、以下のフィールドを作りました。

title_seed
memo
target_reader
tone
n8nのEdit Fieldsノードに記事タイトル、メモ、想定読者、文体を入力している画面
Edit Fieldsノードで、AIに渡す記事テーマやメモを入力します。

入力例は以下です。

title_seed:
  n8nでAIブログ下書きを自動作成してみた

memo:
  WordPressでブログを書いている。毎回、記事構成、本文、SEO情報、入稿作業が面倒なので、n8nを使って下書き作成を自動化したい。完全自動公開ではなく、まずは下書きまでにする。

target_reader:
  WordPressブログ初心者。AIや自動化に興味はあるが、n8nは初めて。

tone:
  [WordPressのURL]らしく、実体験ベースで、やさしく、少し本音も入れる。

ここを変えれば、別の記事テーマでも下書きを作れます。

手順12:OpenAIノードで本文を生成する

次に、OpenAIノードを追加します。

今回は、以下のような設定にしました。

Resource:
Text
Operation:
Message a Model
Model:
GPT-5.4-MINI
n8nのOpenAIノードでGPT-5.4-MINIを選びブログ本文生成プロンプトを設定する画面
OpenAIノードで本文生成用のプロンプトを設定します。

最初は GPT-5.4 を選んでエラーになりましたが、GPT-5.4-MINI に変更したら動きました。
テスト段階では、いきなり高性能なモデルを使わず、まずはMINIのように軽いモデルで試すのがよいと思います。

プロンプトには、Edit Fieldsで入力した値を差し込むようにします。

あなたは、[WordPressのURL]のブログ執筆アシスタントです。以下の情報をもとに、日本語のWordPressブログ記事をMarkdown形式で作成してください。

条件:
- こんにちは、さとさんです。から始める
- 実体験ベースの自然な文体にする
- 読者はWordPressブログ初心者
- 句読点は「、」「。」を使う
- 見出しはMarkdownの##、###を使う
- 最後にまとめを入れる
- 誇張しすぎない
- 完全自動公開はすすめず、下書きまでの自動化をすすめる

出力形式:
以下のJSONだけを返してください。説明文は不要です。
{
  "post_title": "記事タイトル",
  "post_slug": "英数字のスラッグ",
  "meta_description": "120文字前後のメタディスクリプション",
  "post_content": "Markdown形式の本文",
  "tags": ["タグ1", "タグ2", "タグ3"],
  "category_suggestion": "カテゴリー案"
}

記事タイトルの種:{{ $json.title_seed }}

記事メモ:
{{ $json.memo }}

想定読者:{{ $json.target_reader }}
文体:{{ $json.tone }}

OpenAIノードを実行すると、AIが記事本文やタイトル、スラッグなどをJSON形式で返してくれます。

n8nのOpenAIノードが記事タイトル、本文、スラッグをJSON文字列で返した画面
OpenAIノードの出力には、AIが生成した記事情報がJSON文字列として入っています。

手順13:CodeノードでOpenAIの出力を整形する

OpenAIノードの出力は、そのままWordPressノードに渡せる形ではありませんでした。

実際には、

$json.output[0].content[0].text

の中に、JSON文字列として入っていました。

そのため、OpenAIノードとWordPressノードの間に Codeノード を追加します。

OpenAIノードにCode in JavaScriptノードを追加したn8nワークフロー
CodeノードでOpenAIの出力をJSONとして整形します。

Codeノードには、以下を入れました。

const text = $json.output[0].content[0].text;

// 念のため、前後の余計な空白を削る
const parsed = JSON.parse(text.trim());

return [
{
json: parsed
}
];

これで、Codeノードの出力として、

post_title
post_slug
meta_description
post_content
tags
category_suggestion

が並ぶようになります。

このCodeノードを挟まないと、WordPressノードで、

{{ $json.post_title }}

と書いても undefined になってしまいました。

手順14:WordPressノードで下書き投稿する

最後に、WordPressノードを追加します。

今回は以下のように設定しました。

Resource:
Post
Operation:
Create
Title:
{{ $json.post_title }}
Content:
{{ $json.post_content }}
Slug:
{{ $json.post_slug }}
Status:
Draft
n8nのWordPressノードでTitle、Content、Slugにpost_title、post_content、post_slugを指定している画面
WordPressノードで下書き投稿を作成します。

ここで、StatusがDraftになっていることを確認しましょう。
テスト記事がいきなりPublishされないようにします。

最初は必ず下書きです。

手順15:ワークフローを実行する

ここまでできたら、ワークフロー全体を実行します。

Execute workflow

実行後、各ノードにチェックマークが付けば成功です。

Manual Trigger、Edit Fields、OpenAI、Code、WordPressの全ノードが成功したn8nワークフロー
全ノードが成功し、AI生成本文をWordPressに下書き投稿できました。

WordPress管理画面を開きます。

投稿

投稿一覧

下書き

AIが作成したタイトルで、下書き記事が作成されていれば成功です。

WordPress投稿一覧にn8nから作成された下書き投稿が表示されている画面
n8nからWordPressに下書き投稿が作成されました。

実際に投稿を開くと、タイトル、本文、スラッグが入っていました。

WordPress編集画面でn8nから投稿されたAI生成タイトルと本文が表示されている画面
n8nから投稿された下書きには、AIが生成したタイトル、本文、スラッグが入っています。

これで、n8nでAIが作った記事をWordPressに下書き投稿するところまでできました。

今回できたこと

今回できるようになったのは、以下の流れです。

n8nを開く

記事テーマやメモを入力する

OpenAIが本文とSEO情報を作る

Codeノードで出力を整形する

WordPressに下書き投稿される

自分で確認して公開する

これだけでも、ブログを書くときの負担はかなり軽くなります。

特に、毎回面倒な、

  • 本文のたたき台作成
  • 見出し作成
  • メタディスクリプション作成
  • WordPressへの貼り付け

あたりを自動化できるのは大きいです。

完全自動公開はしない

今回の仕組みは、あくまで 下書き作成まで にしています。

理由は、AIが作った文章は便利ですが、そのまま公開するのは、AI量産記事を生み出すだけなのでやめたほうがいいです。

たとえば、

  • 事実関係が合っているか
  • 自分の体験とズレていないか
  • 表現が自分のブログらしいか
  • 読者に誤解を与えないか
  • SEOタイトルやメタディスクリプションが自然か

こういった部分は、まだ人間が確認した方がよいと思います。

特に私のブログでは、節約、投資、子育て、暮らしなど、実体験ベースの記事を書いています。

AIに全部任せるというより、面倒な下書きやもろもろの作業を手伝ってもらうくらいがちょうどよいと考えています。

次にやりたいこと

今回は、決まったプロンプトを使い、本文の下書き投稿まで実現できました。
今後は、以下を追加していきたいです。

カテゴリーとタグの自動設定

OpenAIの出力には、

tags
category_suggestion

も含めています。

今回はまだWordPress投稿には反映していませんが、次はタグやカテゴリーも自動で設定したいです。

メタディスクリプションの反映

OpenAIには meta_description も作らせています。

ただし、私が使っているWordPressのテーマ「Cocoon」のメタディスクリプション欄にどう反映するかは、もう少し調べる必要があります。

WordPressの標準投稿本文とは別のメタ情報になるので、ここは次の課題です。

アイキャッチ画像の自動生成

最終的には、記事内容に合わせたアイキャッチ画像も自動生成したいです。

ただし、画像はブログの印象にかなり影響します。

まずは画像を自動生成するところまでにして、最終的に使うかどうかは自分で確認する運用がよさそうです。

WordPressメディアライブラリへの画像アップロード

画像が生成できたら、WordPressのメディアライブラリにアップロードします。

さらに、アイキャッチ画像として設定できれば、かなり実用的になります。

個人的に一番よさそうな運用

実際に使うなら、完全自動公開ではなく、以下の形がよさそうです。

自分:
体験、写真、数字、最終判断を用意する

n8n:
AIにコンテンツの下書きを書いてもらう
SEO情報を作る
WordPressに下書き投稿する

自分:
内容を確認して公開する

ブログの強みは、やはり実体験です。

AIに全部任せると、どこかで見たような記事になってしまいます。

なので、AIとn8nには、記事を書く前後の面倒な作業を減らしてもらうくらいがちょうどいいと思います。

まとめ

今回は、n8nを使って、AIブログ執筆をWordPressの下書き投稿まで自動化してみました。
一言で言うと、記事メモを入れたら、WordPressに下書きができる、というものです。

このためにn8nで作ったフローは以下の通りです。

Manual Trigger

Edit Fields

OpenAI

Code

WordPress Draft

現時点では、手動実行であることや、固定のプロンプトしか使っていないことなど、まだ改善点はあります。今後カスタマイズして、実用性を高めていきたいです。

というわけで、今後は、プロンプトのインターフェース改善、カテゴリー、タグ、メタディスクリプション、アイキャッチ画像、撮影した画像のアップロードなど、少しずつ自動化していきます。

トラブルシュート

docker compose up -dでpermission deniedが出た

最初の起動時に、以下のエラーが出ました。

n8n  | Error: EACCES: permission denied, open '/home/node/.n8n/config'

原因

原因は、Dockerでマウントしたホスト側の ./n8n_data フォルダに、n8nコンテナ内のユーザーが書き込めないことでした。

今回の docker-compose.yml では、以下のようにホスト側のフォルダをn8nの設定保存先にマウントしています。

volumes:
- ./n8n_data:/home/node/.n8n

しかし、この n8n_data フォルダの所有者や権限が合っていないと、n8nが設定ファイルを作れません。

対処方法

いったんn8nを停止します。

docker compose down

次に、ホスト側の n8n_data フォルダの所有者を変更します。

sudo chown -R 1000:1000 ./n8n_data

念のため、書き込み権限も整えます。

sudo chmod -R u+rwX ./n8n_data

その後、もう一度起動します。

docker compose up -d

今回は、この方法で無事にn8nが起動しました。

WordPress認証情報の接続テストでタイムアウトした

n8nでWordPressの認証情報を登録し、接続テストをしたところ、以下のエラーが出ました。

The connection timed out, consider setting the 'Retry on Fail' option in the node settings

原因

今回の環境では、WordPressもn8nも同じQNAP上のDockerコンテナで動いています。

この状態でn8nのWordPress URLに、

https://[WordPressのURL]

を指定すると、n8nコンテナ内からインターネットを経由して WordPressのURL へアクセスすることになります。

PCのブラウザからはDNSの設定等している場合、 https://[WordPressのURL] にアクセスできていても、n8nコンテナ内から同じように到達できるとは限りません。

対処方法

今回は、n8n側の docker-compose.ymlextra_hosts を追加して解消しました。

extra_hosts:
- "satolabo.net:192.168.10.100"

これにより、n8nコンテナ内では、

satolabo.net → 192.168.10.100

として扱われます。

設定を反映するために、n8nを再作成しました。

docker compose down
docker compose up -d

その後、再度WordPressの接続テストを行うと、正常に接続できました。

OpenAIノードで「You exceeded your current quota」が出た

n8nでOpenAIノードを実行したところ、以下のエラーが出ました。

The service is receiving too many requests from you
You exceeded your current quota, please check your plan and billing details.

原因

最初はOpenAIノードのモデルに GPT-5.4 を指定していました。

この状態で実行すると、OpenAI API側の利用枠や制限に引っかかっているようで、上記のエラーが出ました。

ChatGPT Plusに加入していても、OpenAI APIの利用料金や利用制限は別管理です。

対処方法

OpenAIノードのモデルを、テスト用に軽いモデルへ変更しました。

GPT-5.4

GPT-5.4-MINI

変更後に再実行したところ、OpenAIノードが正常に動作しました。

ブログ記事の下書き生成を試す段階では、いきなり高性能なモデルを使わなくても、まずはmini系モデルで十分だと思います。

ただし、mini系モデルだから無料という意味ではありません。OpenAI APIは原則として利用量に応じて料金が発生します。実際に使う場合は、OpenAI PlatformのUsageやLimitsを確認しながら進めるのが安心です。

WordPressノードで「投稿を編集する権限がありません」と出た

n8nのWordPressノードで下書き投稿を作成しようとしたところ、以下のエラーが出ました。

Authorization failed - please check your credentials
このユーザーとして投稿を編集する権限がありません。

原因確認

最初はWordPressユーザーの権限を疑いました。

ただ、自分のWordPressアカウントは管理者です。

そこで、n8nコンテナ内からWordPress REST APIを直接叩いて確認しました。

AUTH=$(printf 'ユーザー名:アプリケーションパスワード' | base64)
wget -S -O - \
--header "Authorization: Basic $AUTH" \
https://[WordPressのURL]/wp-json/wp/v2/users/me 2>&1 | head -100

この方法でユーザー情報が返ってきたため、アプリケーションパスワード認証自体は通っていました。

次に、REST APIから直接テスト投稿を作成しました。

wget -S -O - \
--header "Authorization: Basic $AUTH" \
--header "Content-Type: application/json" \
--post-data '{"title":"APIテスト投稿","content":"これはREST APIから作成したテスト下書きです。","status":"draft"}' \
https://[WordPressのURL]/wp-json/wp/v2/posts 2>&1 | head -120

この方法では、WordPressに下書き投稿を作成できました。

つまり、WordPress側のREST API、ユーザー権限、アプリケーションパスワード自体は問題なさそうでした。

実際の原因

最終的には、WordPressノードに渡していた値が undefined になっていたことが原因でした。

最初はWordPressノードに、

{{ $json.post_title }}
{{ $json.post_content }}
{{ $json.post_slug }}

を設定していました。

しかし、OpenAIノードの出力はその形では入っていなかったため、WordPressノード側では undefined になっていました。

対処方法

まず、WordPressノードを固定値で試しました。

Title:
test

この状態では投稿が通りました。

次に、ContentやStatusを追加しても通りました。

これで、WordPress Credentialや投稿権限そのものは問題ないと確認できました。

そのうえで、OpenAIノードとWordPressノードの間にCodeノードを挟み、OpenAIの返答をJSONとしてパースするようにしました。

OpenAI出力をWordPressノードで指定するとundefinedになる

OpenAIノードの出力をWordPressノードに渡そうとして、

{{ $json.post_title }}
{{ $json.post_content }}
{{ $json.post_slug }}

を指定したところ、最初はWordPressノード側で undefined と表示されました。

原因

OpenAIノードの出力では、AIが返したJSONがそのまま直下に入っているわけではありませんでした。

実際には、以下のような構造でした。

$json.output[0].content[0].text

この text の中に、JSON文字列として、

{
"post_title": "...",
"post_slug": "...",
"post_content": "..."
}

が入っていました。

そのため、WordPressノードで直接、

{{ $json.post_title }}

としても値を取得できず、undefined になっていました。

対処方法

OpenAIノードとWordPressノードの間にCodeノードを追加し、OpenAIの返答をJSONとしてパースしました。

const text = $json.output[0].content[0].text;

// 念のため、前後の余計な空白を削る
const parsed = JSON.parse(text.trim());

return [
  {
    json: parsed
  }
];

これで、Codeノードの出力として、

post_title
post_slug
post_content
meta_description
tags
category_suggestion

などが直下に並ぶようになりました。

その後、WordPressノードでは以下のように指定しました。

Title:
{{ $json.post_title }}
Content:
{{ $json.post_content }}
Slug:
{{ $json.post_slug }}
Status:
Draft

これで、OpenAIが生成した本文をWordPressの下書き投稿に渡せるようになりました。

コメント

タイトルとURLをコピーしました