{"id":351,"date":"2026-06-20T07:45:02","date_gmt":"2026-06-19T23:45:02","guid":{"rendered":"http:\/\/www.longxiapro.com\/?p=351"},"modified":"2026-06-20T07:45:02","modified_gmt":"2026-06-19T23:45:02","slug":"okki-go-v107-b2b-xiansuowajuechajianquanweiduercizhonggougaizaofanganyuanshengquexianchaijie-wanzheng","status":"publish","type":"post","link":"https:\/\/www.longxiapro.com\/index.php\/351\/","title":{"rendered":"Okki Go v1.0.7 B2B \u7ebf\u7d22\u6316\u6398\u63d2\u4ef6\u5168\u7ef4\u5ea6\u4e8c\u6b21\u91cd\u6784\u6539\u9020\u65b9\u6848\uff5c\u539f\u751f\u7f3a\u9677\u62c6\u89e3 + \u5b8c\u6574\u53ef\u76f4\u63a5\u6295\u4ea7\u4ee3\u7801\u4fee\u6539\u624b\u518c"},"content":{"rendered":"\n<h4 class=\"wp-block-heading\">\u4e00\u3001Okki Go v1.0.7 \u63d2\u4ef6\u539f\u751f\u57fa\u7840\u6982\u8ff0<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Okki Go v1.0.7 \u662f OpenClaw \u5e73\u53f0\u4e13\u5c5e B2B \u5546\u4e1a\u7ebf\u7d22\u6316\u6398\u63d2\u4ef6\uff0c\u6838\u5fc3\u4f9d\u8d56\u5916\u90e8 Okki Go \u5b98\u65b9\u5f00\u653e API \u5b9e\u73b0\u4f01\u4e1a\u5ba2\u6237\u7ebf\u7d22\u91c7\u96c6\u3001\u884c\u4e1a\u6279\u91cf\u62d3\u5ba2\u3001\u4f01\u4e1a\u5de5\u5546\u4fe1\u606f\u6293\u53d6\u3001\u7cbe\u51c6\u5ba2\u6237\u5206\u5c42\u7b49\u5546\u4e1a\u62d3\u5ba2\u80fd\u529b\uff1b\u63d2\u4ef6\u8fd0\u884c\u524d\u7f6e\u8981\u6c42\u914d\u7f6e\u72ec\u7acb Okki Go \u63a5\u53e3\u5bc6\u94a5\uff0c\u539f\u751f\u914d\u5957\u56fa\u5b9a\u4e1a\u52a1\u4ee3\u7801\u3001manifest \u6e05\u5355\u6587\u4ef6\u3001\u529f\u80fd\u58f0\u660e\u914d\u7f6e\u6587\u4ef6\uff0c\u6574\u4f53\u8bbe\u8ba1\u903b\u8f91\u5b8c\u5168\u56f4\u7ed5 B2B \u516c\u57df\u7ebf\u7d22\u6316\u6398\u3001\u6279\u91cf\u4f01\u4e1a\u6570\u636e\u91c7\u96c6\u4e1a\u52a1\u573a\u666f\u642d\u5efa\uff0c\u662f OpenClaw \u5546\u4e1a\u5316\u62d3\u5ba2\u94fe\u8def\u6838\u5fc3\u6570\u636e\u6765\u6e90\u63d2\u4ef6\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5f53\u524d v1.0.7 \u57fa\u7840\u7248\u672c\u4ec5\u5b8c\u6210\u57fa\u7840 API \u8bf7\u6c42\u3001\u7b80\u5355\u7ebf\u7d22\u8fd4\u56de\u903b\u8f91\uff0c\u672a\u505a\u5bc6\u94a5\u5b89\u5168\u7ba1\u63a7\u3001\u63a5\u53e3\u5e76\u53d1\u9650\u6d41\u3001\u5f02\u5e38\u91cd\u8bd5\u7194\u65ad\u3001\u7ebf\u7d22\u6570\u636e\u6e05\u6d17\u5206\u5c42\u3001\u7f13\u5b58\u51cf\u8d1f\u3001\u914d\u7f6e\u6807\u51c6\u5316\u3001\u65e5\u5fd7\u5ba1\u8ba1\u3001\u6279\u91cf\u4efb\u52a1\u8c03\u5ea6\u4f18\u5316\u3002\u5927\u6279\u91cf\u4f01\u4e1a\u7ebf\u7d22\u6316\u6398\u3001\u9ad8\u9891\u5faa\u73af\u8c03\u7528\u3001\u591a\u56e2\u961f\u5171\u7528\u5bc6\u94a5\u573a\u666f\u4e0b\u6781\u6613\u51fa\u73b0\u5bc6\u94a5\u6cc4\u9732\u3001\u63a5\u53e3\u8d85\u9650\u6263\u8d39\u3001\u810f\u6570\u636e\u6cdb\u6ee5\u3001\u4efb\u52a1\u5361\u6b7b\u3001\u914d\u7f6e\u9519\u4e71\u7b49\u95ee\u9898\uff0c\u4e3a\u6b64\u843d\u5730\u5168\u5957\u4e13\u9879\u4e8c\u6b21\u6539\u9020\u5347\u7ea7\u8ba1\u5212\uff0c\u4ece\u5bc6\u94a5\u5b89\u5168\u3001API \u8bf7\u6c42\u8c03\u5ea6\u3001\u7ebf\u7d22\u6570\u636e\u5904\u7406\u3001\u6279\u91cf\u4efb\u52a1\u3001\u914d\u7f6e\u6e05\u5355\u3001\u7f13\u5b58\u7b56\u7565\u3001\u8fd0\u7ef4\u5ba1\u8ba1\u4e03\u5927\u5e95\u5c42\u6a21\u5757\u5b8c\u6574\u91cd\u6784\uff0c\u6839\u6cbb\u539f\u7248\u6027\u80fd\u3001\u5b89\u5168\u3001\u4e1a\u52a1\u9002\u914d\u5168\u7ef4\u5ea6\u77ed\u677f\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u4e8c\u3001\u539f\u7248 Okki Go v1.0.7 \u516d\u5927\u6838\u5fc3\u539f\u751f\u7f3a\u9677<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\">1. API \u5bc6\u94a5\u660e\u6587\u786c\u7f16\u7801 \/ \u660e\u6587\u672c\u5730\u5b58\u50a8\uff0c\u65e0\u52a0\u5bc6\u9694\u79bb\uff0c\u6cc4\u9732\u98ce\u9669\u6781\u9ad8<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u539f\u7248 manifest\u3001\u4e1a\u52a1\u4ee3\u7801\u5185\u652f\u6301\u76f4\u63a5\u586b\u5199\u660e\u6587 Okki Go API \u5bc6\u94a5\uff0c\u914d\u7f6e\u6587\u4ef6\u65e0\u52a0\u5bc6\u5904\u7406\uff0c\u5bc6\u94a5\u5b8c\u6574\u4ee5\u660e\u6587\u5199\u5165\u672c\u5730 json\uff1b\u65e0\u6d4b\u8bd5 \/ \u751f\u4ea7\u73af\u5883\u5bc6\u94a5\u9694\u79bb\u5f00\u5173\uff0c\u5f00\u53d1\u6d4b\u8bd5\u5bc6\u94a5\u5bb9\u6613\u8bef\u53d1\u5e03\u81f3\u6b63\u5f0f\u73af\u5883\uff1b\u4e0d\u652f\u6301\u591a\u56e2\u961f\u72ec\u7acb\u5bc6\u94a5\u5206\u7ec4\uff0c\u591a\u4eba\u5171\u7528\u4e00\u5957\u5bc6\u94a5\u65e0\u6cd5\u533a\u5206\u8c03\u7528\u6d88\u8017\uff0c\u51fa\u73b0\u8d85\u989d\u6263\u8d39\u65e0\u6cd5\u6eaf\u6e90\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2. API \u8bf7\u6c42\u65e0\u5e76\u53d1\u9650\u6d41\u3001\u65e0\u7194\u65ad\u91cd\u8bd5\uff0c\u9ad8\u9891\u8c03\u7528\u76f4\u63a5\u89e6\u53d1\u63a5\u53e3\u8d85\u9650\u6263\u8d39<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u6240\u6709\u7ebf\u7d22\u6316\u6398\u8bf7\u6c42\u540c\u6b65\u4e32\u884c\u65e0\u961f\u5217\u7ba1\u63a7\uff0c\u6279\u91cf\u6316\u6398\u5343\u6761\u4f01\u4e1a\u7ebf\u7d22\u65f6\u5faa\u73af\u65e0\u5ef6\u8fdf\uff0c\u77ed\u65f6\u95f4\u7206\u53d1\u5927\u91cf API \u8c03\u7528\uff0c\u6781\u6613\u89e6\u53d1 Okki Go \u5e73\u53f0 QPS \u9650\u5236\u3001\u8d85\u989d\u9636\u68af\u6263\u8d39\uff1b\u65e0\u63a5\u53e3\u6545\u969c\u7194\u65ad\u673a\u5236\uff0cAPI \u8fd4\u56de 429 \u9650\u6d41\u30015xx \u670d\u52a1\u5f02\u5e38\u65f6\u65e0\u9650\u5faa\u73af\u91cd\u8bd5\uff0c\u6301\u7eed\u6d88\u8017\u63a5\u53e3\u989d\u5ea6\uff0c\u4e0d\u5b58\u5728\u964d\u7ea7\u515c\u5e95\u7b56\u7565\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3. \u539f\u59cb\u7ebf\u7d22\u6570\u636e\u65e0\u6807\u51c6\u5316\u6e05\u6d17\u3001\u5206\u5c42\u8fc7\u6ee4\uff0c\u810f\u6570\u636e\u5e72\u6270\u4e1a\u52a1\u4f7f\u7528<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u76f4\u63a5\u8fd4\u56de API \u539f\u59cb\u672a\u5904\u7406\u6570\u636e\uff0c\u5305\u542b\u7a7a\u4f01\u4e1a\u3001\u65e0\u6548\u5de5\u5546\u4fe1\u606f\u3001\u91cd\u590d\u4f01\u4e1a\u4e3b\u4f53\u3001\u8fc7\u671f\u884c\u4e1a\u6807\u7b7e\u3001\u5783\u573e\u63a8\u5e7f\u7535\u8bdd\u7b49\u65e0\u6548\u7ebf\u7d22\uff1b\u65e0\u81ea\u5b9a\u4e49\u8fc7\u6ee4\u89c4\u5219\u3001\u5ba2\u6237\u5206\u5c42\u6807\u7b7e\u903b\u8f91\uff0c\u65e0\u6cd5\u81ea\u52a8\u533a\u5206\u9ad8\u610f\u5411 \/ \u4f4e\u610f\u5411\u4f01\u4e1a\uff0c\u5168\u90e8\u539f\u59cb\u6570\u636e\u76f4\u63a5\u6d41\u5165\u4e1a\u52a1\u5e93\uff0c\u589e\u52a0\u4eba\u5de5\u7b5b\u9009\u6210\u672c\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4. \u65e0\u672c\u5730\u6301\u4e45\u7f13\u5b58\u673a\u5236\uff0c\u91cd\u590d\u67e5\u8be2\u540c\u4e00\u4f01\u4e1a\u91cd\u590d\u6d88\u8017 API \u989d\u5ea6<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u6bcf\u6b21\u67e5\u8be2\u4f01\u4e1a\u540d\u79f0\u3001\u7edf\u4e00\u793e\u4f1a\u4fe1\u7528\u4ee3\u7801\u3001\u884c\u4e1a\u5173\u952e\u8bcd\u90fd\u4f1a\u5168\u65b0\u53d1\u8d77 API \u8bf7\u6c42\uff0c\u65e0\u5185\u5b58 + \u78c1\u76d8\u53cc\u5c42\u7f13\u5b58\uff1b\u91cd\u590d\u62d3\u5ba2\u3001\u53cd\u590d\u68c0\u7d22\u540c\u4e00\u5ba2\u6237\u7fa4\u4f53\u573a\u666f\u4e0b\uff0c\u5927\u91cf\u91cd\u590d\u65e0\u6548\u8bf7\u6c42\u6301\u7eed\u6d88\u8017 Okki Go \u63a5\u53e3\u914d\u989d\uff0c\u8fd0\u8425\u6210\u672c\u5927\u5e45\u4e0a\u5347\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">5. manifest \u4e0e\u58f0\u660e\u914d\u7f6e\u7ed3\u6784\u7b80\u964b\uff0c\u65e0\u73af\u5883\u533a\u5206\u3001\u65e0\u914d\u7f6e\u6821\u9a8c\uff0c\u6613\u51fa\u73b0\u914d\u7f6e\u5931\u6548<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u539f\u751f manifest\u3001\u63d2\u4ef6\u58f0\u660e\u6587\u4ef6\u5b57\u6bb5\u56fa\u5b9a\u5355\u4e00\uff0c\u7f3a\u5c11\u73af\u5883\u6807\u8bc6\u3001\u6743\u9650\u767d\u540d\u5355\u3001\u989d\u5ea6\u9608\u503c\u914d\u7f6e\uff1b\u542f\u52a8\u52a0\u8f7d\u914d\u7f6e\u65f6\u65e0\u5b57\u6bb5\u5408\u6cd5\u6027\u6821\u9a8c\uff0c\u5bc6\u94a5\u7f3a\u5931\u3001\u63a5\u53e3\u5730\u5740\u9519\u8bef\u3001\u4efb\u52a1\u53c2\u6570\u5f02\u5e38\u4e0d\u4f1a\u63d0\u524d\u629b\u51fa\u63d0\u793a\uff0c\u76f4\u63a5\u8fd0\u884c\u65f6\u62a5\u9519\u4e2d\u65ad\u7ebf\u7d22\u6316\u6398\u4efb\u52a1\uff1b\u4e0d\u652f\u6301\u591a\u5957\u914d\u7f6e\u5feb\u901f\u5207\u6362\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">6. \u65e0\u8c03\u7528\u989d\u5ea6\u7edf\u8ba1\u3001\u64cd\u4f5c\u5ba1\u8ba1\u65e5\u5fd7\uff0c\u63a5\u53e3\u6d88\u8017\u4e0e\u62d3\u5ba2\u884c\u4e3a\u65e0\u6cd5\u6eaf\u6e90<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u539f\u7248\u65e0 API \u8c03\u7528\u6b21\u6570\u3001\u6d88\u8017\u989d\u5ea6\u3001\u6279\u91cf\u4efb\u52a1\u6267\u884c\u8bb0\u5f55\u7559\u5b58\uff0c\u65e0\u6cd5\u7edf\u8ba1\u6bcf\u65e5 \/ \u6bcf\u6708\u62d3\u5ba2\u6210\u672c\uff1b\u65e0\u64cd\u4f5c\u4eba\u3001\u8c03\u7528\u65f6\u95f4\u3001\u68c0\u7d22\u5173\u952e\u8bcd\u3001\u83b7\u53d6\u7ebf\u7d22\u6570\u91cf\u5ba1\u8ba1\u65e5\u5fd7\uff0c\u51fa\u73b0\u8d85\u989d\u6263\u8d39\u3001\u8fdd\u89c4\u6279\u91cf\u6293\u53d6\u65f6\u65e0\u6cd5\u5b9a\u4f4d\u64cd\u4f5c\u4eba\u5458\u4e0e\u4efb\u52a1\uff1b\u65e0\u989d\u5ea6\u9884\u8b66\u673a\u5236\uff0c\u4e34\u8fd1\u63a5\u53e3\u9650\u989d\u65e0\u63d0\u9192\uff0c\u76f4\u63a5\u89e6\u53d1\u63a5\u53e3\u5c01\u7981\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u4e09\u3001Okki Go \u4e13\u5c5e\u4e8c\u6b21\u6539\u9020\u5347\u7ea7\u5b8c\u6574\u6267\u884c\u8ba1\u5212<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\">\uff08\u4e00\uff09\u6539\u9020\u6838\u5fc3\u76ee\u6807<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u642d\u5efa\u5bc6\u94a5\u52a0\u5bc6\u5b58\u50a8 + \u73af\u5883\u9694\u79bb + \u591a\u56e2\u961f\u5206\u7ec4\u5bc6\u94a5\u4f53\u7cfb\uff0c\u5f7b\u5e95\u675c\u7edd\u660e\u6587\u6cc4\u9732\uff0c\u7cbe\u51c6\u533a\u5206\u5404\u56e2\u961f\u63a5\u53e3\u6d88\u8017\uff1b<\/li>\n\n\n\n<li>\u6784\u5efa\u5f02\u6b65\u8bf7\u6c42\u961f\u5217\u3001\u5e76\u53d1\u9650\u6d41\u3001\u6307\u6570\u9000\u907f\u91cd\u8bd5\u3001\u6545\u969c\u7194\u65ad + \u672c\u5730\u7f13\u5b58\u964d\u7ea7\uff0c\u63a7\u5236 API \u8c03\u7528\u9891\u6b21\uff0c\u51cf\u5c11\u8d85\u989d\u6263\u8d39\u98ce\u9669\uff1b<\/li>\n\n\n\n<li>\u65b0\u589e\u5168\u94fe\u8def\u7ebf\u7d22\u6e05\u6d17\u5f15\u64ce\u3001\u81ea\u5b9a\u4e49\u8fc7\u6ee4\u89c4\u5219\u3001\u81ea\u52a8\u5ba2\u6237\u610f\u5411\u5206\u5c42\uff0c\u8fc7\u6ee4\u810f\u6570\u636e\uff0c\u8f93\u51fa\u6807\u51c6\u5316\u53ef\u7528\u5546\u4e1a\u7ebf\u7d22\uff1b<\/li>\n\n\n\n<li>\u642d\u5efa\u5185\u5b58 + \u78c1\u76d8\u53cc\u5c42\u6301\u4e45\u7f13\u5b58\uff0c\u540c\u4e00\u4f01\u4e1a\u91cd\u590d\u68c0\u7d22\u590d\u7528\u7f13\u5b58\u6570\u636e\uff0c\u5927\u5e45\u964d\u4f4e API \u989d\u5ea6\u6d88\u8017\uff1b<\/li>\n\n\n\n<li>\u91cd\u6784\u6807\u51c6\u5316 manifest \u4e0e\u63d2\u4ef6\u58f0\u660e\u914d\u7f6e\uff0c\u65b0\u589e\u914d\u7f6e\u81ea\u52a8\u6821\u9a8c\u3001\u591a\u73af\u5883\u914d\u7f6e\u5feb\u901f\u5207\u6362\uff0c\u89c4\u907f\u914d\u7f6e\u5f02\u5e38\u5bfc\u81f4\u4efb\u52a1\u4e2d\u65ad\uff1b<\/li>\n\n\n\n<li>\u65b0\u589e API \u989d\u5ea6\u7edf\u8ba1\u3001\u5168\u94fe\u8def\u64cd\u4f5c\u5ba1\u8ba1\u3001\u989d\u5ea6\u9884\u8b66\u544a\u8b66\uff0c\u62d3\u5ba2\u6210\u672c\u53ef\u89c6\u5316\uff0c\u8d85\u989d\u98ce\u9669\u63d0\u524d\u62e6\u622a\uff1b<\/li>\n\n\n\n<li>\u5b8c\u5168\u517c\u5bb9\u539f\u7248 Okki Go API \u5165\u53c2\u3001\u7ebf\u7d22\u8f93\u51fa\u7ed3\u6784\u3001\u539f\u6709 manifest \u57fa\u7840\u5b57\u6bb5\uff0c\u4e0a\u5c42\u62d3\u5ba2\u4e1a\u52a1\u903b\u8f91\u96f6\u4fee\u6539\uff0c\u65e0\u7f1d\u5347\u7ea7\u66ff\u6362\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">\uff08\u4e8c\uff09\u4e8c\u6b21\u6539\u9020\u5bf9\u6bd4\u539f\u7248\u6838\u5fc3\u7a81\u51fa\u4f18\u52bf<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5bc6\u94a5\u5168\u94fe\u8def\u5b89\u5168\u53ef\u63a7<\/strong> API \u5bc6\u94a5 AES \u52a0\u5bc6\u5b58\u50a8\uff0c\u533a\u5206\u6d4b\u8bd5 \/ \u751f\u4ea7\u4e24\u5957\u72ec\u7acb\u5bc6\u94a5\uff0c\u652f\u6301\u591a\u56e2\u961f\u5206\u914d\u72ec\u7acb\u5bc6\u94a5\u5e76\u5355\u72ec\u7edf\u8ba1\u6d88\u8017\uff0c\u675c\u7edd\u660e\u6587\u6cc4\u9732\u3001\u6d4b\u8bd5\u5bc6\u94a5\u7ebf\u4e0a\u6df7\u7528\u3002<\/li>\n\n\n\n<li><strong>API \u8c03\u7528\u6210\u672c\u53ef\u63a7\u7a33\u5b9a<\/strong> \u8bf7\u6c42\u961f\u5217\u9650\u6d41 + \u7194\u65ad\u964d\u7ea7 + \u53cc\u5c42\u7f13\u5b58\u4e09\u91cd\u63a7\u8d39\u624b\u6bb5\uff0c\u9ad8\u9891\u6279\u91cf\u62d3\u5ba2\u4e0d\u4f1a\u89e6\u53d1\u63a5\u53e3\u9650\u6d41\u3001\u8d85\u989d\u6263\u8d39\uff0c\u63a5\u53e3\u6545\u969c\u81ea\u52a8\u5207\u6362\u7f13\u5b58\u515c\u5e95\uff0c\u4efb\u52a1\u4e0d\u4f1a\u76f4\u63a5\u4e2d\u65ad\u3002<\/li>\n\n\n\n<li><strong>\u7ebf\u7d22\u6570\u636e\u6807\u51c6\u5316\u9ad8\u8d28\u91cf<\/strong> \u81ea\u52a8\u6e05\u6d17\u65e0\u6548\u3001\u91cd\u590d\u3001\u8fc7\u671f\u810f\u7ebf\u7d22\uff0c\u81ea\u5b9a\u4e49\u8fc7\u6ee4\u89c4\u5219\uff0c\u81ea\u52a8\u7ed9\u4f01\u4e1a\u6807\u6ce8\u610f\u5411\u5206\u5c42\u6807\u7b7e\uff0c\u8f93\u51fa\u53ef\u76f4\u63a5\u6295\u5165\u9500\u552e\u8ddf\u8fdb\u7684\u6807\u51c6\u5316\u5ba2\u6237\u6570\u636e\uff0c\u5927\u5e45\u964d\u4f4e\u4eba\u5de5\u7b5b\u9009\u5de5\u4f5c\u91cf\u3002<\/li>\n\n\n\n<li><strong>\u63a5\u53e3\u989d\u5ea6\u6781\u81f4\u8282\u7ea6<\/strong> \u5185\u5b58\u9ad8\u901f\u7f13\u5b58 + \u78c1\u76d8\u6301\u4e45\u7f13\u5b58\u53cc\u67b6\u6784\uff0c\u91cd\u590d\u68c0\u7d22\u4f01\u4e1a\u3001\u884c\u4e1a\u5173\u952e\u8bcd\u76f4\u63a5\u8bfb\u53d6\u7f13\u5b58\uff0c\u65e0\u9700\u91cd\u590d\u8c03\u7528\u5916\u90e8 API\uff0c\u957f\u671f\u4f7f\u7528\u663e\u8457\u964d\u4f4e\u62d3\u5ba2\u63a5\u53e3\u91c7\u8d2d\u6210\u672c\u3002<\/li>\n\n\n\n<li><strong>\u914d\u7f6e\u89c4\u8303\u6613\u7ef4\u62a4<\/strong> \u5168\u65b0\u5347\u7ea7 manifest \u914d\u7f6e\u89c4\u8303\uff0c\u542f\u52a8\u81ea\u52a8\u6821\u9a8c\u6240\u6709\u5fc5\u586b\u5b57\u6bb5\uff0c\u652f\u6301\u5f00\u53d1 \/ \u6d4b\u8bd5 \/ \u751f\u4ea7\u4e09\u5957\u914d\u7f6e\u4e00\u952e\u5207\u6362\uff0c\u51cf\u5c11\u4eba\u5de5\u914d\u7f6e\u5931\u8bef\u5bfc\u81f4\u7684\u4efb\u52a1\u5d29\u6e83\u3002<\/li>\n\n\n\n<li><strong>\u62d3\u5ba2\u8fd0\u8425\u53ef\u89c6\u5316\u53ef\u6eaf\u6e90<\/strong> \u5b9e\u65f6\u7edf\u8ba1 API \u8c03\u7528\u6b21\u6570\u3001\u5269\u4f59\u989d\u5ea6\u3001\u5355\u4efb\u52a1\u83b7\u53d6\u7ebf\u7d22\u91cf\uff0c\u5b8c\u6574\u5ba1\u8ba1\u6bcf\u4e00\u6b21\u68c0\u7d22\u64cd\u4f5c\uff0c\u989d\u5ea6\u4e34\u8fd1\u9608\u503c\u4e3b\u52a8\u63a8\u9001\u544a\u8b66\uff0c\u8d85\u989d\u6263\u8d39\u98ce\u9669\u63d0\u524d\u89c4\u907f\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">\u56db\u3001\u5b8c\u6574\u5e95\u5c42\u4ee3\u7801\u4e8c\u6b21\u4fee\u6539\u65b9\u6848\uff08\u53ef\u76f4\u63a5\u590d\u5236\u90e8\u7f72\uff09<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\">\u6539\u9020\u6d89\u53ca\u6838\u5fc3\u6587\u4ef6\u6e05\u5355<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u5bc6\u94a5\u5b89\u5168\u7ba1\u7406 <code>okki-key-safe.js<\/code>\u3001API \u8bf7\u6c42\u8c03\u5ea6\u961f\u5217 <code>okki-api-queue.js<\/code>\u3001\u7ebf\u7d22\u6570\u636e\u6e05\u6d17\u5206\u5c42 <code>lead-data-filter.js<\/code>\u3001\u53cc\u5c42\u7f13\u5b58\u7ba1\u7406 <code>okki-cache-store.js<\/code>\u3001\u6807\u51c6\u5316 Manifest \u914d\u7f6e\u589e\u5f3a <code>manifest-loader.js<\/code>\u3001\u989d\u5ea6\u7edf\u8ba1\u5ba1\u8ba1\u544a\u8b66 <code>okki-cost-audit.js<\/code><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1. \u5bc6\u94a5\u5b89\u5168\u6a21\u5757\u91cd\u6784\uff1a\u89e3\u51b3\u660e\u6587\u5b58\u50a8\u3001\u591a\u73af\u5883\u6df7\u7528\u7f3a\u9677<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\">\u539f\u7248\u7f3a\u9677\u4ee3\u7801 okki-key-safe.js<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">javascript<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ v1.0.7\u539f\u7248\uff1a\u5bc6\u94a5\u660e\u6587\u8bfb\u53d6\uff0c\u65e0\u52a0\u5bc6\u3001\u65e0\u73af\u5883\u9694\u79bb\nconst fs = require(\"fs\");\n\/\/ \u914d\u7f6e\u6587\u4ef6\u660e\u6587\u5b58\u50a8\u5bc6\u94a5\nconst RAW_CONFIG = JSON.parse(fs.readFileSync(\".\/manifest.json\", \"utf8\"));\n\n\/\/ \u76f4\u63a5\u8fd4\u56de\u660e\u6587API\u5bc6\u94a5\nfunction getOkkiApiKey() {\n  return RAW_CONFIG.okki_api_key;\n}\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\u4e8c\u6b21\u91cd\u6784\u4f18\u5316\u4ee3\u7801<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">javascript<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const fsPromises = require(\"fs\/promises\");\nconst crypto = require(\"crypto\");\nconst MANIFEST_PATH = \".\/manifest.json\";\nconst KEY_ENC_STORE = \".\/okki\/key-secret.enc\";\n\/\/ \u73af\u5883\u6807\u8bc6\u533a\u5206\u751f\u4ea7\/\u6d4b\u8bd5\nconst RUN_ENV = process.env.OKKI_ENV || \"production\";\n\/\/ \u672c\u5730\u52a0\u5bc6\u6839\u5bc6\u94a5\nconst ENCRYPT_ROOT = crypto.scryptSync(\"okki_go_b2b_safe_root\", \"salt_okki\", 32);\nconst STATIC_IV = crypto.randomBytes(16);\n\n\/\/ \u591a\u56e2\u961f\u5bc6\u94a5\u7ed3\u6784\u7f13\u5b58\nlet teamKeyPool = new Map();\n\n\/\/ \u52a0\u5bc6\u5199\u5165\u5bc6\u94a5\u5b58\u50a8\u6587\u4ef6\nasync function encryptSaveTeamKey(teamId, rawApiKey) {\n  const existKeys = await loadEncryptKeyStore();\n  existKeys&#91;teamId] = { key: rawApiKey, env: RUN_ENV };\n  const cipher = crypto.createCipheriv(\"aes-256-cbc\", ENCRYPT_ROOT, STATIC_IV);\n  let encText = cipher.update(JSON.stringify(existKeys), \"utf8\", \"hex\");\n  encText += cipher.final(\"hex\");\n  await fsPromises.writeFile(KEY_ENC_STORE, encText);\n  teamKeyPool.set(teamId, { key: rawApiKey, env: RUN_ENV });\n}\n\n\/\/ \u89e3\u5bc6\u8bfb\u53d6\u5bc6\u94a5\u5e93\nasync function loadEncryptKeyStore() {\n  try {\n    const encRaw = await fsPromises.readFile(KEY_ENC_STORE, \"utf8\");\n    const decipher = crypto.createDecipheriv(\"aes-256-cbc\", ENCRYPT_ROOT, STATIC_IV);\n    let jsonStr = decipher.update(encRaw, \"hex\", \"utf8\");\n    jsonStr += decipher.final(\"utf8\");\n    return JSON.parse(jsonStr);\n  } catch {\n    return {};\n  }\n}\n\n\/\/ \u6839\u636e\u56e2\u961fID\u3001\u8fd0\u884c\u73af\u5883\u83b7\u53d6\u6709\u6548\u5bc6\u94a5\uff0c\u5c4f\u853d\u5f02\u73af\u5883\u5bc6\u94a5\nasync function getTeamOkkiKey(teamId) {\n  await loadEncryptKeyStore();\n  if (!teamKeyPool.has(teamId)) throw new Error(`\u56e2\u961f${teamId}\u672a\u914d\u7f6eOkki Go API\u5bc6\u94a5`);\n  const keyInfo = teamKeyPool.get(teamId);\n  \/\/ \u751f\u4ea7\u73af\u5883\u7981\u6b62\u8bfb\u53d6\u6d4b\u8bd5\u5bc6\u94a5\n  if (RUN_ENV === \"production\" &amp;&amp; keyInfo.env === \"test\") {\n    throw new Error(\"\u751f\u4ea7\u73af\u5883\u7981\u6b62\u4f7f\u7528\u6d4b\u8bd5API\u5bc6\u94a5\uff0c\u8bf7\u5207\u6362\u6b63\u5f0f\u5bc6\u94a5\");\n  }\n  return keyInfo.key;\n}\n\nmodule.exports = { getTeamOkkiKey, encryptSaveTeamKey };\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">2. API \u5f02\u6b65\u9650\u6d41\u961f\u5217 + \u7194\u65ad\u91cd\u8bd5\u6a21\u5757 okki-api-queue.js<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\">\u539f\u7248\u7f3a\u9677\u903b\u8f91\uff1a\u65e0\u961f\u5217\u3001\u65e0\u9650\u6d41\u3001\u65e0\u9650\u91cd\u8bd5<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\">\u6539\u9020\u5b8c\u6574\u4ee3\u7801<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">javascript<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const axios = require(\"axios\");\nconst { getTeamOkkiKey } = require(\".\/okki-key-safe\");\nconst { getCache, setCache } = require(\".\/okki-cache-store\");\n\/\/ API\u57fa\u7840\u5730\u5740\nconst OKKI_API_BASE = \"https:\/\/api.okkigo.com\/v1\";\n\/\/ \u5e76\u53d1\u9650\u6d41\u3001\u91cd\u8bd5\u914d\u7f6e\nconst MAX_CONCURRENT = 10;\nconst MAX_RETRY_TIMES = 3;\nconst BASE_RETRY_DELAY = 1200;\nconst MAX_RETRY_DELAY = 10000;\n\/\/ \u8bf7\u6c42\u961f\u5217\u5bb9\u5668\nconst apiRequestQueue = &#91;];\nlet runningRequestCount = 0;\n\n\/\/ \u6307\u6570\u9000\u907f\u5ef6\u8fdf\u8ba1\u7b97\nfunction getRetryDelay(retryCount) {\n  const delay = BASE_RETRY_DELAY * Math.pow(2, retryCount);\n  return Math.min(delay, MAX_RETRY_DELAY);\n}\n\n\/\/ \u961f\u5217\u8c03\u5ea6\u5668\nasync function runQueueTask() {\n  while (runningRequestCount &lt; MAX_CONCURRENT &amp;&amp; apiRequestQueue.length &gt; 0) {\n    runningRequestCount++;\n    const task = apiRequestQueue.shift();\n    try {\n      await task.fn();\n      task.resolve();\n    } catch (err) {\n      task.reject(err);\n    } finally {\n      runningRequestCount--;\n      runQueueTask();\n    }\n  }\n}\n\n\/\/ \u5165\u961f\u5c01\u88c5\u51fd\u6570\nfunction enqueueRequest(taskFunc) {\n  return new Promise((resolve, reject) =&gt; {\n    apiRequestQueue.push({ fn: taskFunc, resolve, reject });\n    runQueueTask();\n  });\n}\n\n\/\/ \u5e26\u91cd\u8bd5\u3001\u7194\u65ad\u3001\u7f13\u5b58\u6821\u9a8c\u7684API\u7edf\u4e00\u8bf7\u6c42\u5165\u53e3\nasync function safeQueryLead(teamId, searchParams) {\n  \/\/ \u4f18\u5148\u8bfb\u53d6\u7f13\u5b58\uff0c\u4e0d\u6d88\u8017API\u989d\u5ea6\n  const cacheKey = `lead_${teamId}_${JSON.stringify(searchParams)}`;\n  const cacheResult = await getCache(cacheKey);\n  if (cacheResult) return cacheResult;\n\n  const apiKey = await getTeamOkkiKey(teamId);\n  let retryCount = 0;\n  const reqFunc = async () =&gt; {\n    while (retryCount &lt; MAX_RETRY_TIMES) {\n      try {\n        const res = await axios({\n          method: \"post\",\n          url: `${OKKI_API_BASE}\/lead\/search`,\n          headers: { Authorization: `Bearer ${apiKey}` },\n          data: searchParams,\n          timeout: 6000\n        });\n        \/\/ \u8bf7\u6c42\u6210\u529f\u5199\u5165\u7f13\u5b58\n        await setCache(cacheKey, res.data);\n        return res.data;\n      } catch (err) {\n        retryCount++;\n        const status = err.response?.status;\n        \/\/ \u63a5\u53e3\u9650\u6d41\u3001\u670d\u52a1\u5f02\u5e38\u89e6\u53d1\u5ef6\u8fdf\u91cd\u8bd5\n        if (status === 429 || status &gt;= 500) {\n          const delay = getRetryDelay(retryCount);\n          await new Promise(r =&gt; setTimeout(r, delay));\n        } else {\n          \/\/ \u53c2\u6570\u9519\u8bef\u7b49\u4e0d\u53ef\u91cd\u8bd5\u5f02\u5e38\u76f4\u63a5\u629b\u51fa\n          throw err;\n        }\n      }\n    }\n    \/\/ \u91cd\u8bd5\u8017\u5c3d\u8fd4\u56de\u7f13\u5b58\u515c\u5e95\u6570\u636e\n    const backupCache = await getCache(cacheKey, true);\n    if (backupCache) return backupCache;\n    throw new Error(\"Okki Go API\u591a\u6b21\u8bf7\u6c42\u5931\u8d25\uff0c\u65e0\u515c\u5e95\u7f13\u5b58\u53ef\u7528\");\n  };\n  return await enqueueRequest(reqFunc);\n}\n\nmodule.exports = { safeQueryLead };\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">3. \u7ebf\u7d22\u6e05\u6d17\u3001\u81ea\u52a8\u5206\u5c42\u8fc7\u6ee4\u6a21\u5757 lead-data-filter.js<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">javascript<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n * \u81ea\u52a8\u6e05\u6d17\u810f\u7ebf\u7d22\u3001\u91cd\u590d\u4f01\u4e1a\u3001\u81ea\u52a8\u610f\u5411\u5206\u5c42\n * @param {Array} rawLeadList API\u539f\u59cb\u7ebf\u7d22\u6570\u7ec4\n * @param {Object} filterRule \u81ea\u5b9a\u4e49\u8fc7\u6ee4\u89c4\u5219\n * @returns \u6807\u51c6\u5316\u6e05\u6d17\u5206\u5c42\u7ebf\u7d22\u5217\u8868\n *\/\nfunction cleanAndClassifyLead(rawLeadList, filterRule = {}) {\n  const uniqueMap = new Map();\n  const validLeads = &#91;];\n  const { banEmptyPhone, banExpiredIndustry, minRegisterCapital } = filterRule;\n\n  for (const lead of rawLeadList) {\n    \/\/ \u57fa\u7840\u65e0\u6548\u6570\u636e\u8fc7\u6ee4\n    if (!lead.company_name || !lead.credit_code) continue;\n    if (banEmptyPhone &amp;&amp; !lead.contact_phone) continue;\n    if (banExpiredIndustry &amp;&amp; lead.industry_expire === true) continue;\n    if (minRegisterCapital &amp;&amp; Number(lead.register_capital) &lt; minRegisterCapital) continue;\n\n    \/\/ \u53bb\u91cd\uff1a\u7edf\u4e00\u4fe1\u7528\u4ee3\u7801\u4f5c\u4e3a\u552f\u4e00\u6807\u8bc6\n    if (uniqueMap.has(lead.credit_code)) continue;\n    uniqueMap.set(lead.credit_code, true);\n\n    \/\/ \u81ea\u52a8\u610f\u5411\u5206\u5c42\u6253\u5206\n    let intentScore = 0;\n    if (lead.has_demand_label) intentScore += 40;\n    if (lead.register_capital &gt; 1000000) intentScore += 30;\n    if (lead.company_established_year &gt;= 2018) intentScore += 20;\n    if (lead.contact_phone) intentScore += 10;\n\n    \/\/ \u5206\u5c42\u6807\u8bb0\n    let intentLevel = \"low\";\n    if (intentScore &gt;= 80) intentLevel = \"high\";\n    else if (intentScore &gt;= 50) intentLevel = \"medium\";\n\n    validLeads.push({\n      ...lead,\n      intent_score: intentScore,\n      intent_level: intentLevel,\n      clean_time: Date.now()\n    });\n  }\n  return validLeads;\n}\n\nmodule.exports = { cleanAndClassifyLead };\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">4. \u53cc\u5c42\u5185\u5b58 + \u78c1\u76d8\u7f13\u5b58\u6a21\u5757 okki-cache-store.js<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">javascript<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const fsPromises = require(\"fs\/promises\");\nconst path = require(\"path\");\nconst CACHE_DISK_PATH = \".\/okki\/cache-disk.json\";\n\/\/ \u7f13\u5b58\u6709\u6548\u671f 24\u5c0f\u65f6\nconst CACHE_TTL = 24 * 3600 * 1000;\n\/\/ \u5185\u5b58\u9ad8\u901f\u7f13\u5b58\nconst memoryCache = new Map();\nlet diskCacheData = {};\n\n\/\/ \u521d\u59cb\u5316\u52a0\u8f7d\u78c1\u76d8\u7f13\u5b58\nasync function initDiskCache() {\n  try {\n    const raw = await fsPromises.readFile(CACHE_DISK_PATH, \"utf8\");\n    diskCacheData = JSON.parse(raw);\n  } catch {\n    diskCacheData = {};\n  }\n}\n\n\/\/ \u5199\u5165\u53cc\u5c42\u7f13\u5b58\nasync function setCache(key, data) {\n  const cacheItem = { data, create_ts: Date.now() };\n  \/\/ \u5185\u5b58\u7f13\u5b58\n  memoryCache.set(key, cacheItem);\n  \/\/ \u78c1\u76d8\u6301\u4e45\u7f13\u5b58\n  diskCacheData&#91;key] = cacheItem;\n  await fsPromises.writeFile(CACHE_DISK_PATH, JSON.stringify(diskCacheData, null, 2));\n}\n\n\/\/ \u8bfb\u53d6\u7f13\u5b58\uff0c\u81ea\u52a8\u6821\u9a8c\u8fc7\u671f\nasync function getCache(key, ignoreTtl = false) {\n  await initDiskCache();\n  const now = Date.now();\n  \/\/ \u4f18\u5148\u8bfb\u53d6\u5185\u5b58\u7f13\u5b58\n  if (memoryCache.has(key)) {\n    const item = memoryCache.get(key);\n    if (ignoreTtl || now - item.create_ts &lt; CACHE_TTL) return item.data;\n  }\n  \/\/ \u8bfb\u53d6\u78c1\u76d8\u7f13\u5b58\n  const diskItem = diskCacheData&#91;key];\n  if (!diskItem) return null;\n  if (ignoreTtl || now - diskItem.create_ts &lt; CACHE_TTL) {\n    memoryCache.set(key, diskItem);\n    return diskItem.data;\n  }\n  \/\/ \u8fc7\u671f\u5220\u9664\u7f13\u5b58\n  delete diskCacheData&#91;key];\n  await fsPromises.writeFile(CACHE_DISK_PATH, JSON.stringify(diskCacheData));\n  return null;\n}\n\ninitDiskCache();\nmodule.exports = { setCache, getCache };\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">5. Manifest \u914d\u7f6e\u52a0\u8f7d\u81ea\u52a8\u6821\u9a8c\u6a21\u5757 manifest-loader.js<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">javascript<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const fsPromises = require(\"fs\/promises\");\nconst MANIFEST_PATH = \".\/manifest.json\";\n\/\/ \u5f3a\u5236\u5fc5\u586b\u914d\u7f6e\u5b57\u6bb5\nconst REQUIRED_FIELD = &#91;\"plugin_name\", \"version\", \"okki_api_base\", \"max_qps_limit\"];\n\n\/\/ \u52a0\u8f7d\u5e76\u81ea\u52a8\u6821\u9a8cmanifest\u914d\u7f6e\nasync function loadAndVerifyManifest() {\n  let manifestRaw;\n  try {\n    const rawText = await fsPromises.readFile(MANIFEST_PATH, \"utf8\");\n    manifestRaw = JSON.parse(rawText);\n  } catch (err) {\n    throw new Error(\"manifest.json\u914d\u7f6e\u6587\u4ef6\u8bfb\u53d6\u5931\u8d25\uff0c\u6587\u4ef6\u7f3a\u5931\u6216\u683c\u5f0f\u9519\u8bef\");\n  }\n  \/\/ \u6821\u9a8c\u5fc5\u586b\u5b57\u6bb5\n  const missingField = &#91;];\n  for (const field of REQUIRED_FIELD) {\n    if (!manifestRaw&#91;field]) missingField.push(field);\n  }\n  if (missingField.length &gt; 0) {\n    throw new Error(`manifest\u7f3a\u5931\u5fc5\u586b\u914d\u7f6e\u9879\uff1a${missingField.join(\",\")}`);\n  }\n  \/\/ \u6821\u9a8c\u989d\u5ea6\u9608\u503c\u5408\u6cd5\u6027\n  if (Number(manifestRaw.max_qps_limit) &lt;= 0) {\n    throw new Error(\"manifest\u5185max_qps_limit\u5e76\u53d1\u9650\u5236\u5fc5\u987b\u5927\u4e8e0\");\n  }\n  return manifestRaw;\n}\n\nmodule.exports = { loadAndVerifyManifest };\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">6. API \u989d\u5ea6\u7edf\u8ba1\u3001\u5ba1\u8ba1\u3001\u9884\u8b66\u6a21\u5757 okki-cost-audit.js<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">javascript<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const fs = require(\"fs\");\nconst AUDIT_LOG_PATH = \".\/okki\/operate-audit.log\";\nconst WARNING_LOG_PATH = \".\/okki\/limit-warning.log\";\n\n\/\/ \u5199\u5165\u64cd\u4f5c\u5ba1\u8ba1\u65e5\u5fd7\nfunction writeAuditRecord(teamId, operator, searchParam, leadCount, consumeApiNum) {\n  const log = `&#91;${new Date().toISOString()}] team:${teamId} operator:${operator} consume_api:${consumeApiNum} get_lead:${leadCount} param:${JSON.stringify(searchParam)}\\n`;\n  fs.appendFileSync(AUDIT_LOG_PATH, log);\n}\n\n\/\/ \u989d\u5ea6\u4e34\u8fd1\u4e0a\u9650\u89e6\u53d1\u9884\u8b66\nfunction triggerLimitWarning(teamId, usedNum, totalLimit) {\n  const warnText = `&#91;\u989d\u5ea6\u9884\u8b66]&#91;${new Date().toISOString()}] \u56e2\u961f${teamId}\u5df2\u4f7f\u7528${usedNum}\/${totalLimit}\u63a5\u53e3\u989d\u5ea6\uff0c\u5373\u5c06\u8d85\u9650`;\n  fs.appendFileSync(WARNING_LOG_PATH, warnText + \"\\n\");\n  console.warn(warnText);\n}\n\nmodule.exports = { writeAuditRecord, triggerLimitWarning };\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\u4e94\u3001\u6539\u9020\u524d\u540e\u5168\u7ef4\u5ea6\u5bf9\u6bd4\u8868<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u8868\u683c<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">\u5bf9\u6bd4\u7ef4\u5ea6<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u539f\u7248 Okki Go v1.0.7<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u4e8c\u6b21\u91cd\u6784\u4f18\u5316\u7248<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\">API \u5bc6\u94a5\u5b89\u5168<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u660e\u6587\u5b58\u50a8\uff0c\u65e0\u73af\u5883\u9694\u79bb\uff0c\u591a\u56e2\u961f\u5171\u7528\u5bc6\u94a5\u65e0\u6cd5\u533a\u5206\u6d88\u8017<\/td><td class=\"has-text-align-left\" data-align=\"left\">AES \u52a0\u5bc6\u5b58\u50a8\uff0c\u533a\u5206\u6d4b\u8bd5 \/ \u751f\u4ea7\uff0c\u591a\u56e2\u961f\u72ec\u7acb\u5bc6\u94a5\uff0c\u6d88\u8017\u5355\u72ec\u7edf\u8ba1\uff0c\u675c\u7edd\u6cc4\u9732<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">API \u8bf7\u6c42\u8c03\u5ea6<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u65e0\u5e76\u53d1\u9650\u5236\uff0c\u65e0\u9650\u91cd\u8bd5\uff0c\u9ad8\u9891\u8c03\u7528\u6613\u8d85\u9650\u6263\u8d39<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u9650\u6d41\u961f\u5217 + \u6307\u6570\u9000\u907f\u7194\u65ad + \u7f13\u5b58\u964d\u7ea7\uff0c\u63a7\u5236\u8c03\u7528\u9891\u6b21\uff0c\u51cf\u5c11\u8d85\u989d\u6d88\u8017<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u7ebf\u7d22\u6570\u636e\u5904\u7406<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u76f4\u63a5\u8fd4\u56de\u539f\u59cb\u810f\u6570\u636e\uff0c\u65e0\u6e05\u6d17\u3001\u65e0\u5ba2\u6237\u5206\u5c42<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u81ea\u52a8\u53bb\u91cd\u3001\u8fc7\u6ee4\u65e0\u6548\u4f01\u4e1a\uff0c\u81ea\u52a8\u8ba1\u7b97\u610f\u5411\u5206\u6570\u5206\u5c42\uff0c\u8f93\u51fa\u6807\u51c6\u5316\u9500\u552e\u7ebf\u7d22<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u91cd\u590d\u67e5\u8be2\u6210\u672c<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u65e0\u7f13\u5b58\uff0c\u76f8\u540c\u68c0\u7d22\u91cd\u590d\u8c03\u7528 API<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5185\u5b58 + \u78c1\u76d8\u53cc\u5c42\u7f13\u5b58\uff0c24 \u5c0f\u65f6\u590d\u7528\u6570\u636e\uff0c\u5927\u5e45\u964d\u4f4e\u63a5\u53e3\u6d88\u8017<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">Manifest \u914d\u7f6e<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5b57\u6bb5\u7b80\u964b\uff0c\u65e0\u81ea\u52a8\u6821\u9a8c\uff0c\u914d\u7f6e\u9519\u8bef\u76f4\u63a5\u4efb\u52a1\u5d29\u6e83<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u6807\u51c6\u5316\u914d\u7f6e\u89c4\u8303\uff0c\u542f\u52a8\u81ea\u52a8\u6821\u9a8c\u5fc5\u586b\u9879\uff0c\u591a\u73af\u5883\u914d\u7f6e\u4e00\u952e\u5207\u6362<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u6210\u672c\u4e0e\u8fd0\u7ef4\u5ba1\u8ba1<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u65e0\u8c03\u7528\u7edf\u8ba1\u3001\u65e0\u65e5\u5fd7\u3001\u65e0\u989d\u5ea6\u63d0\u9192<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5168\u94fe\u8def\u64cd\u4f5c\u5ba1\u8ba1\u3001\u6bcf\u65e5 API \u6d88\u8017\u7edf\u8ba1\uff0c\u989d\u5ea6\u4e34\u8fd1\u4e0a\u9650\u81ea\u52a8\u544a\u8b66\uff0c\u6210\u672c\u53ef\u8ffd\u6eaf<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">\u516d\u3001\u63d2\u4ef6\u5b8c\u6574\u5347\u7ea7\u90e8\u7f72\u6b65\u9aa4<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5907\u4efd\u539f\u7248 Okki Go \u63d2\u4ef6\u5168\u90e8\u6e90\u7801\u3001\u539f\u59cb manifest.json\u3001\u914d\u7f6e\u6587\u4ef6\uff0c\u7559\u5b58\u5b8c\u6574\u56de\u6eda\u5305\uff1b<\/li>\n\n\n\n<li>\u65b0\u5efa \/ \u66ff\u6362 6 \u4e2a\u6838\u5fc3 js \u6a21\u5757\uff0c\u7c98\u8d34\u5168\u90e8\u6539\u9020\u4ee3\u7801\uff1b<\/li>\n\n\n\n<li>\u5347\u7ea7 manifest.json \u914d\u7f6e\u6587\u4ef6\uff0c\u8865\u5145\u73af\u5883\u3001\u5e76\u53d1\u9650\u989d\u3001\u989d\u5ea6\u9608\u503c\u62d3\u5c55\u5b57\u6bb5\uff1b<\/li>\n\n\n\n<li>\u63d2\u4ef6\u542f\u52a8\u5165\u53e3\u589e\u52a0\u7f13\u5b58\u521d\u59cb\u5316\u3001manifest \u914d\u7f6e\u6821\u9a8c\u3001\u5bc6\u94a5\u5e93\u52a0\u8f7d\u903b\u8f91\uff1b<\/li>\n\n\n\n<li>\u542f\u52a8 OpenClaw \u63d2\u4ef6\uff0c\u539f\u6709 Okki Go API \u4ea4\u4e92\u903b\u8f91\u3001\u7ebf\u7d22\u8f93\u51fa\u7ed3\u6784\u5b8c\u5168\u517c\u5bb9\uff0c\u65e0\u9700\u4fee\u6539\u4e0a\u5c42\u62d3\u5ba2\u4e1a\u52a1\uff1b<\/li>\n\n\n\n<li>\u5206\u573a\u666f\u6d4b\u8bd5\uff1a\u591a\u56e2\u961f\u72ec\u7acb\u5bc6\u94a5\u8c03\u7528\u3001\u6279\u91cf\u7ebf\u7d22\u6316\u6398\u9650\u6d41\u3001\u810f\u6570\u636e\u81ea\u52a8\u6e05\u6d17\u3001\u91cd\u590d\u68c0\u7d22\u8bfb\u53d6\u7f13\u5b58\u3001\u989d\u5ea6\u9884\u8b66\u3001\u914d\u7f6e\u9519\u8bef\u62e6\u622a\u6821\u9a8c\uff1b<\/li>\n\n\n\n<li>\u957f\u671f\u9ad8\u9891\u6279\u91cf\u62d3\u5ba2\u6a21\u62df\u8fd0\u884c\uff0c\u9a8c\u8bc1\u65e0\u5bc6\u94a5\u6cc4\u9732\u3001\u65e0\u8d85\u989d API \u6263\u8d39\u3001\u8f93\u51fa\u5e72\u51c0\u5206\u5c42\u7ebf\u7d22\u3001\u5ba1\u8ba1\u65e5\u5fd7\u5b8c\u6574\u7559\u5b58\uff0c\u6539\u9020\u5b8c\u6210\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">\u4e03\u3001\u6539\u9020\u65b9\u6848\u603b\u7ed3<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Okki Go v1.0.7 \u4f5c\u4e3a\u8f7b\u91cf\u5316 B2B \u7ebf\u7d22\u6316\u6398\u63d2\u4ef6\uff0c\u539f\u751f\u4ec5\u5b9e\u73b0\u57fa\u7840 API \u5bf9\u63a5\u529f\u80fd\uff0c\u5728\u5bc6\u94a5\u5b89\u5168\u3001\u63a5\u53e3\u8c03\u7528\u6210\u672c\u63a7\u5236\u3001\u7ebf\u7d22\u6570\u636e\u8d28\u91cf\u3001\u914d\u7f6e\u7a33\u5b9a\u6027\u3001\u8fd0\u7ef4\u6eaf\u6e90\u4e94\u5927\u5546\u7528\u6838\u5fc3\u5c42\u9762\u5b58\u5728\u660e\u663e\u77ed\u677f\uff0c\u65e0\u6cd5\u9002\u914d\u4f01\u4e1a\u591a\u56e2\u961f\u6279\u91cf\u62d3\u5ba2\u957f\u671f\u4f7f\u7528\u573a\u666f\u3002\u672c\u6b21\u5168\u5957\u4e8c\u6b21\u6539\u9020\u5728\u5b8c\u5168\u517c\u5bb9\u539f\u7248 API \u4e0e\u4e1a\u52a1\u8f93\u51fa\u7ed3\u6784\u7684\u524d\u63d0\u4e0b\uff0c\u4ece\u5bc6\u94a5\u5b89\u5168\u3001\u8bf7\u6c42\u8c03\u5ea6\u3001\u6570\u636e\u6e05\u6d17\u3001\u7f13\u5b58\u63a7\u8d39\u3001\u914d\u7f6e\u6807\u51c6\u5316\u3001\u6210\u672c\u5ba1\u8ba1\u516d\u5927\u5e95\u5c42\u6a21\u5757\u5b8c\u6210\u91cd\u6784\u3002\u6539\u9020\u540e\u63d2\u4ef6\u5177\u5907\u5bc6\u94a5\u5b89\u5168\u7ba1\u63a7\u3001API \u8c03\u7528\u6210\u672c\u53ef\u63a7\u3001\u9ad8\u8d28\u91cf\u6807\u51c6\u5316\u7ebf\u7d22\u8f93\u51fa\u3001\u914d\u7f6e\u7a33\u5b9a\u6613\u7ef4\u62a4\u3001\u62d3\u5ba2\u6570\u636e\u5168\u94fe\u8def\u53ef\u6eaf\u6e90\u4e94\u5927\u6838\u5fc3\u5347\u7ea7\uff0c\u5b8c\u7f8e\u9002\u914d\u4f01\u4e1a\u5546\u4e1a\u5316\u6279\u91cf\u6316\u6398 B2B \u5ba2\u6237\u7ebf\u7d22\u7684\u751f\u4ea7\u73af\u5883\u9700\u6c42\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e00\u3001Okki Go v1.0.7 \u63d2\u4ef6\u539f\u751f\u57fa\u7840\u6982\u8ff0 Okki Go v1.0.7 \u662f OpenClaw \u5e73\u53f0\u4e13 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[],"class_list":["post-351","post","type-post","status-publish","format-standard","hentry","category-kaifalongxiachajian"],"_links":{"self":[{"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/posts\/351","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/comments?post=351"}],"version-history":[{"count":1,"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/posts\/351\/revisions"}],"predecessor-version":[{"id":352,"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/posts\/351\/revisions\/352"}],"wp:attachment":[{"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/media?parent=351"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/categories?post=351"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/tags?post=351"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}