Запрос возможностей сервера
Discovery WOPI - это запрос к CO серверу, в ответе на который он декларирует свои возможности по работе с документами различных форматов. Запрос Discovery (cм. Рисунок) возвращает структуру XML, содержащую список actions. Каждый action связывает доступное действие с документом заданного формата. Предполагается, что запрос Discovery должен вызываться периодически для того, чтобы всегда иметь актуальную версию. WOPI-сервер обращается к СО-серверу только для получения дискавери (без авторизации). WOPI-сервер синхронизирует полученный дискавери с Host Application. Таким образом, они оба знают о возможностях СО сервера по работе с офисными документами.

Ссылки на документацию:
- https://docs.microsoft.com/en-us/openspecs/office_protocols/ms-wopi/cb062e23-43b7-4344-9063-f91bb780948a
- https://learn.microsoft.com/en-us/microsoft-365/cloud-storage-partner-program/online/discovery
- https://learn.microsoft.com/en-us/microsoft-365/cloud-storage-partner-program/online/discovery#wopi-discovery-actions
- https://learn.microsoft.com/en-us/microsoft-365/cloud-storage-partner-program/online/discovery#edit
- https://learn.microsoft.com/en-us/microsoft-365/cloud-storage-partner-program/online/discovery#action-urls
Вид запроса Discovery:
GET http://co-server/hosting/discovery
В ответ на запрос возвращается список элементов action, см. Таблицу.
Таблица – Элементы и атрибуты ответа Discovery
| Атрибут | Описание |
|---|---|
action | Описывает операции, которые могут быть выполнены с документами заданных форматов (view, edit, editnew, convert) |
urlsrc | URI, который используется для обработки документа, имеющего формат, прописанный в атрибуте ext |
Список возможных операций:
- view - открытие документа на просмотр;
- edit - открытие документа на редактирование;
- editnew - создание документа на основе шаблона ODF с последующим редактированием;
- convert - создание документа на основе шаблона бинарного формата с последующим редактированием.
Host Application передает свой токен в СО Web Editor, в свою очередь СО Web Editor идет с этим токеном на СО-сервер. СО-сервер обращается с данным токеном на WOPI-сервер, проверяя у токена валидность и права на файл. То есть первый запрос от СО Web Editor к СО-серверу и является "авторизацией" сессии редактирования.
Пример запроса:
curl -X GET https://docs-wopi.devoffice.ru/hosting/discovery
Пример ответа:
<wopi-discovery><br/> <net-zone name="external-https"><br/> <app name="MyOffice" checkLicense="false"><br/> <action name="view" default="true" ext="txt" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="doc" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="rtf" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="dot" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="dotx" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="odt" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="docx" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="dotm" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="xls" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="xlt" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="xltx" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="csv" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="ods" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="xlsx" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="ppt" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="pot" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="potx" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="pps" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="ppsx" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="odp" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="pptx" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="xodt" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="xott" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="xodp" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="xotp" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="xods" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="xots" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="docm" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="ott" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="pptm" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="otp" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="ppsm" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="xlsm" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="xltm" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="tsv" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="ots" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="TXT" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="DOC" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="RTF" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="DOT" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="DOTX" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="ODT" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="DOCX" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="DOTM" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="XLS" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="XLT" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="XLTX" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="CSV" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="ODS" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="XLSX" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="PPT" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="POT" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="POTX" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="PPS" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="PPSX" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="ODP" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="PPTX" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="XODT" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="XOTT" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="XODP" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="XOTP" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="XODS" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="XOTS" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="DOCM" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="OTT" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="PPTM" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="OTP" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="PPSM" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="XLSM" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="XLTM" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="TSV" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="view" default="true" ext="OTS" urlsrc="https://docs-dora.devoffice.ru/wopi/viewer/?"/><br/> <action name="edit" ext="docx" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="odt" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="ott" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="xodt" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="xott" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="pptx" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="odp" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="otp" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="xodp" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="xotp" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="xlsx" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="ods" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="ots" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="xods" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="xots" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="DOCX" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="ODT" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="OTT" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="XODT" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="XOTT" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="PPTX" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="ODP" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="OTP" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="XODP" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="XOTP" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="XLSX" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="ODS" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="OTS" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="XODS" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="edit" ext="XOTS" urlsrc="https://docs-dora.devoffice.ru/wopi/editor/?"/><br/> <action name="editnew" ext="odt" urlsrc="https://docs-dora.devoffice.ru/wopi/create/?"/><br/> <action name="editnew" ext="ods" urlsrc="https://docs-dora.devoffice.ru/wopi/create/?"/><br/> <action name="editnew" ext="odp" urlsrc="https://docs-dora.devoffice.ru/wopi/create/?"/><br/> <action name="editnew" ext="xlsx" urlsrc="https://docs-dora.devoffice.ru/wopi/create/?"/><br/> <action name="editnew" ext="docx" urlsrc="https://docs-dora.devoffice.ru/wopi/create/?"/><br/> <action name="editnew" ext="pptx" urlsrc="https://docs-dora.devoffice.ru/wopi/create/?"/><br/> <action name="editnew" ext="ODT" urlsrc="https://docs-dora.devoffice.ru/wopi/create/?"/><br/> <action name="editnew" ext="ODS" urlsrc="https://docs-dora.devoffice.ru/wopi/create/?"/><br/> <action name="editnew" ext="ODP" urlsrc="https://docs-dora.devoffice.ru/wopi/create/?"/><br/> <action name="editnew" ext="XLSX" urlsrc="https://docs-dora.devoffice.ru/wopi/create/?"/><br/> <action name="editnew" ext="DOCX" urlsrc="https://docs-dora.devoffice.ru/wopi/create/?"/><br/> <action name="editnew" ext="PPTX" urlsrc="https://docs-dora.devoffice.ru/wopi/create/?"/><br/> <action name="convert" ext="doc" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="rtf" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="dot" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="xls" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="xlt" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="dot" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="dotx" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="xlt" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="xltx" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="ppt" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="pot" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="potx" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="pps" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="ppsx" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="csv" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="tsv" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="txt" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="DOC" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="RTF" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="DOT" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="XLS" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="XLT" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="DOT" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="DOTX" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="XLT" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="XLTX" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="PPT" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="POT" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="POTX" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="PPS" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="PPSX" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="CSV" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="TSV" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> <action name="convert" ext="TXT" urlsrc="https://docs-dora.devoffice.ru/wopi/convertAndEdit/?"/><br/> </app><br/> </net-zone><br/></wopi-discovery>
Соответствие операций и расширений для версии <VERSION> приведены в таблице.
| Операция | Тип файла |
|---|---|
| edit | xodt, xott, xods, xots, xodp, xotp, docx, xlsx, pptx, odt, ott, ods, ots, odp, otp, txt. |
| view | xodt, xott, xodp, xotp, xods, xots, dotx ,odt, docx, dotm, xls, xlt, xltx, csv, ods, xlsx, ppt, pot, potx, pps, ppsx, odp, pptx, docm, ott, xlsm, xltm, tsv, ots, pptm, otp, ppsm, potm, doc, dot, rtf, txt. |
| create new | docx, xlsx, pptx, odt, ods, odp. |
| convert | doc, dot, dotx, rtf, txt, xls, xlt, xltx, csv, tsv, ppt, pot, potx, pps, ppsx. |