anchor.diff:  %% contacts保存联系人的格式为 [{account(), #{rel=>rel()}}]
   %%     rel() :: single|double
   model(contacts) -> ss_model:filter([contacts], model(all));
  +
  +%% message
  +model(chat) -> ss_model:confirm_model([
  +    {message, #{}},
  +    {from, #{}},
  +    {to, #{}},
  +    {type, #{}}
  +]);
   
   model(_) -> [].
   
  
positive.code:         W:send({account, From}, [chat_online_confirm, Confirm]),
          %% 通知连接者
          ss_server:dispatch({chat_from, Content, From}, S),
          {ok, S}
      end, S).
  
  
negative.code: chat_offline(TrackId, Content, From, #{world:=W}=S) ->
      force_login(fun() ->
          W:send(?offline, [delete, TrackId]),
          ss_server:dispatch({chat_offline, Content, From}, S),
          %% 保存接收记录
          save_chat(Content, From, maps:get(account, S), S),
          {ok, S}
      end, S).
  
  %% 聊天消息确认
  chat_online_confirm({Pid, Ref}, S) ->
      force_login(fun() ->
          erlang:display("chat confirm ...."),
          Pid ! {confirm, Ref},
  